[英]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.