簡體   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