Подготовка запроса с помощью подготовки mysql

Я готовлю запрос, используя подготовку mysqli, но это дает ошибку. Проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования near '? ) AND ( user_fullname ? )'

  $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();

Пожалуйста, помогите мне найти проблему в запросе Спасибо заранее


person Mohammad Arshi    schedule 15.01.2014    source источник
comment
Я не понимаю, почему вы хотите привязать параметры к синтаксису MySQL?   -  person BenM    schedule 15.01.2014
comment
проверьте php.net/manual/en/mysqli.prepare.php   -  person Damodaran    schedule 15.01.2014
comment
Я хочу использовать параметр привязки, чтобы предотвратить внедрение sql   -  person Mohammad Arshi    schedule 15.01.2014
comment
Последнее ограничение необходимо, поскольку было бы невозможно определить тип параметра. Не разрешено сравнивать маркер с NULL с помощью ? тоже NULL. Как правило, параметры допустимы только в операторах языка манипулирования данными (DML), а не в операторах языка определения данных (DDL).   -  person Mohammad Arshi    schedule 15.01.2014


Ответы (1)


Если предположить, что $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-запрос, даже путем привязки параметров.

person Xardas    schedule 15.01.2014
comment
Я проверил php.net, там четко указано, что мы не можем использовать NULL и IS NULL в параметрах привязки. - person Mohammad Arshi; 15.01.2014
comment
Странно, этот stackoverflow.com/questions/5214574/ php-bind-params-with-null показывает, что это должно работать. - person Xardas; 15.01.2014
comment
Да, тогда вам следует построить строку запроса по частям. Если ответ пуст, тогда quiz_answer IS NULL, а если он не пуст, используйте привязку параметра. Тогда я советую использовать PDO, вы можете использовать там именованные параметры. - person Xardas; 15.01.2014