2011-10-21 67 views
0

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

查询的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)VALU ES(16657,“tt”,“Meisjes”,“11803”);阵列()在cronner_cron()(行/家94/...

+0

也许可以在方法'$ db_catalogus-> query($ sql_insert_product);'的代码中找到解释。你可以发布吗? –

+0

这是一个标准的drupal函数:s –

回答

3

问题确实是在您的查询。 有,而不是默认的撇号在思想报,这使得双引号字段分隔符的设置, 。

因此,单一个改变你的双引号(并相应修改语法)

$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); 

前添加此代码,也不会有永远与任何报价的任何问题。

+0

我编辑了代码,使其更具可读性。 :) 但我之所以选择配音引号是因为我插入的一些值将包含单引号。 –

+0

例如我用'{$ prod-> merk}'替换了'tt',并且一个值的示例是l'artigiano italiano 当我达到此值时,查询会遇到麻烦。 –

+0

YE,但我的意思是我在我的cron文件中编辑它,我感谢你帮助我!我会尽量让将来的所有内容更具可读性! –

3

显然,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设置,我不会推荐。

相关问题