2014-01-15 1 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

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

+0

Я хочу использовать параметр привязки для предотвращения внедрения 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(); 

Но я также предложить дополнительную проверку парам быть выполнены, прежде чем вставлять их в SQL-запрос, даже параметром-связывания.

+0

Я проверил php.net, ясно сказано, что мы не можем использовать NULL и IS NULL в параметрах привязки –

+0

Это странно, этот http://stackoverflow.com/questions/5214574/php-bind-params-with-null показывает, что он должен работать. – Xardas

+0

Да, тогда вы должны построить свою строку запроса по частям. Если ответ пуст, quiz_answer IS NULL, и если он не пуст, используйте привязку param. Я советую использовать PDO, тогда вы можете использовать именованные параметры. – Xardas