2012-03-13 105 views
0

大家好我有以下查詢從phpmyadmin執行給我沒有問題,但使用mysqli擴展時是一個噩夢,但只在一個函數變量。msqli查詢 - mysqli_sql_exception語法錯誤

$reference_field = 'attribute'; 
$value = $attribute; // it actual worths 'Size,S Small ,M Medium ,L Large ,XXL 2Xl XX-Large ,XXXL 3Xl XXX-Large '; 
$original_value = md5($value); 

$SQL = " UPDATE jos_jf_content As j SET j.value = '%s' , 
j.original_value = '%s' WHERE j.reference_id =%d 
AND j.reference_field ='%s' "; 
echo $a=sprintf($SQL,$value,$original_value, $prodId,'attribute'); 
$Myconnector->real_query($a ); 

它給我

mysqli_sql_exception: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near " at line 3 

在做查詢的打印似乎一切OK和調試工作正常,在一個單一的PHP文件單獨執行它,使我這個麻煩只是一個功能

內部時
UPDATE jos_jf_content As j 
SET j.value = 'Size,S Small ,M Medium ,L Large ,XXL 2Xl XX-Large ' , 
j.original_value = 'f8508eb38ed3e26e6f3814a253b12c9a' , j.modified = 1331632841 
WHERE j.reference_id =1787 AND j.reference_field ='attribute' 
+0

我沒有看到結果查詢的任何雙引號。你有機會輸出*另一個*查詢 – zerkms 2012-03-13 10:05:40

+0

裏面有什麼功能?函數對查詢做了什麼?你能告訴我們嗎? – 2012-03-13 10:06:36

+3

我不敢相信你展示的PHP代碼會生成這個查詢。 '1331632841'不是八進制數,'1787'不是二進制數。另外,爲什麼使用mysqli並避免準備好的語句? – 2012-03-13 10:12:43

回答

0

我的猜測是,你有這樣的事情:

$bar = 'Hello, World!'; 
$sql = sprintf("SELECT * FROM foo WHERE bar='%s'", $bar); 

...它轉化爲:

function get_sql(){ 
    return sprintf("SELECT * FROM foo WHERE bar='%s'", $bar); 
} 
$bar = 'Hello, World!'; 
$sql = get_sql(); 

基本問題:

  1. 您還沒有配置PHP張貼告示。
  2. 您忽略了變量範圍。

快速修復:

ini_set('display_errors', TRUE); 
error_reporting(E_ALL | E_STRICT); 

function get_sql($bar){ 
    return sprintf("SELECT * FROM foo WHERE bar='%s'", $bar); 
} 
$bar = 'Hello, World!'; 
$sql = get_sql($bar);