2014-01-15 48 views
0

我使用mysqli的準備準備查詢準備查詢但這給了一個錯誤 檢查對應於你的MySQL服務器版本正確的語法使用near '? ) AND ( user_fullname ? )'用mysql準備

$query="DELETE FROM table WHERE ( quiz_answer ? ) AND (user_fullname ?)"; 
    $stmt = $mysqli->prepare($query); 


    $stmt->bind_param('ss',array('IS NULL','IS NULL')); 
    $stmt->execute(); 

請幫助手冊我在查詢中發現問題 在此先感謝

+0

我不明白你爲什麼要將參數綁定到MySQL語法? – BenM

+0

檢查http://www.php.net/manual/en/mysqli.prepare.php – Damodaran

+0

我想用bind參數來防止sql注入 –

回答

0

如果我們假設,$ answer和$ fullname是您的quiz_answer和user_fullname參數。 這可能會實現:

$answerString = 'IS NULL'; 
$userString = 'IS NULL'; 

if (trim($answer) && $answer != 'null') $answerString = '= ?'; 
if (trim($user) && $user != 'null') $userString = '= ?'; 

$query="DELETE FROM table WHERE ( quiz_answer $answerString ) AND (user_fullname $userString)"; 

$stmt = $mysqli->prepare($query); 

if ($answer && ! $fullname) $stmt->bind_param('s',array($answer)); 
if ($answer && $fullname) $stmt->bind_param('ss',array($answer, $fullname)); 
if (! $answer && $fullname) $stmt->bind_param('s',array($fullname)); 

$stmt->execute(); 

,但我也建議更多的PARAM驗證被甚至參數結合將它們插入到SQL查詢之前執行。

+0

我檢查了php.net,明確提到我們不能在綁定參數中使用NULL和IS NULL –

+0

它是奇怪,這個http://stackoverflow.com/questions/5214574/php-bind-params-with-null表明它應該工作。 – Xardas

+0

是的,你應該建立你的查詢字符串,然後部分。如果答案爲空,則quiz_answer爲空,如果不爲空,則使用參數綁定。我建議使用PDO,那麼你可以在那裏使用命名參數。 – Xardas