繁体   English   中英

在php中执行我的查询时出错,但在phpmyadmin中却没有

[英]error executing my query in php but not in phpmyadmin

我正在尝试在drupal7的cron作业中执行查询。 但是,正在发生一些奇怪的事情。 每当它尝试执行时,我都会收到一个PDOException。 当我将查询粘贴到phpmyadmin中时,没有问题,查询将执行。 但是,在我的cronjob中,它给出了错误。 问题不在我的cronjob中,我知道这一点,因为它也可以执行其他查询而没有任何问题。

查询的php代码:

$sql_insert_product = 'INSERT INTO tblProducten(productnummer, merk, doelgroep, RefLev)'
. 'VALUES(' . $prod->productnummer . ', "tt", "' . $prod->doelgroep . '", "'
. $prod->reflev . '")';
$db_catalogus->query($sql_insert_product);

代码生成的结果查询可在phpmyadmin中运行:

INSERT INTO tblProducten(productnummer, merk, doelgroep, RefLev) VALUES(16657, "tt", "Meisjes", "11803")

例外:

PDOException:SQLSTATE [42S22]:找不到列:1054“字段列表”中的未知列“ tt”:INSERT INTO tblProducten(productnummer,merk,doelgroep,RefLev)VALUES(16657,“ tt”,“ Meisjes”,“ 11803” ); cronner_cron()中的数组()(/ home / ...的第94行

问题确实出在您的查询中。 mysl中有一个设置,使双引号成为字段定界符,而不是默认的撇号。

因此,请用单引号将双引号更改(并相应地修改语法)

$sql = "INSERT INTO tblProducten(productnummer, merk, doelgroep, RefLev)
VALUES ({$prod->productnummer}, 'tt', '{$prod->doelgroep}','{$prod->reflev}')";
$db_catalogus->query($sql);

并且,要让您知道,格式几乎是不可读的,带有所有不必要的串联和引号。

如果您在报价方面遇到问题,那您将无法逃避自己的价值观
它将导致您进行SQL注入。
总是转义您在查询中放置的任何字符串。
并相应地格式化其他值。

在查询之前添加此代码

$prod->productnummer = intval($prod->productnummer);
$prod->doelgroep = mysql_real_escape_string($prod->doelgroep);
$prod->reflev = mysql_real_escape_string($prod->reflev);

而且任何报价都不会有任何问题。

显然,PHPMyAdmin和您的cron脚本在不同的SQL模式下运行。 这是问题的说明:

SET sql_mode = 'ANSI_QUOTES'; # treats double quotes as an identifier quote character 
SELECT "name" FROM table1;

name
=====
alpha
beta
gamma

SET sql_mode = ''; # treats double quotes as string literal quote character
SELECT "name" FROM table1;

name
=====
name
name
name

理想情况下,您不应该使用"作为字符串定界符(在示例中为"tt" ),而应使用单引号,这是每个SQL数据库都会理解的标准。或者您可以尝试使用我不建议使用的ANSI_QUOTES设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM