неопределенные переменные не допускаются в параметре bind -> как получить ошибку

1

У меня есть простой код:

$SQL = $db->prepare(
        "INSERT INTO tbl_signup (full_name,email,telephone,password) VALUES (?,?,?,?)");

    $SQL->bind_param('ssss', $full_name,  $signup_email,$telephone, $password);

    $SQL->execute();

Этот код не работает. Никакая строка не вставлена в bdd. Нет ошибки. Ничего.

И когда я добавляю:

$full_name = $signup_email = $telephone = $password = "";

Код работает.

Вывод: неопределенная переменная не допускается с помощью bindparam.

Но как получить ошибку в моем случае??

Я пробовал все:

 $SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$SQL->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

 $SQL->execute();

     echo "\nPDO::errorCode(): ", $SQL->errorCode();

      print_r($SQL->errorInfo()); 

     $SQL->debugDumpParams();

Но у меня нет ошибки.

Как получить ошибку?

  • 0
    Здесь есть существенная проблема в том, что ваш вызов prepare() использует методы MySQLi, но позже вы попытаетесь использовать обработку ошибок PDO. Какой вы используете? Их API отличаются. Первое, что нужно сделать, - включить собственный отчет об ошибках PHP, так как он должен жаловаться на неопределенные методы. error_reporting(E_ALL); ini_set('display_errors', 1); вверху вашего скрипта, всегда при отладке и тестировании. Неустранимая ошибка в коде из-за этого несоответствия без включенных display_errors, поэтому вы не видите сообщений об ошибках.
  • 0
    bind_param('ssss', $var1, $var2, $varN) - это метод MySQLi. Эквивалентом в PDO является bindParam() .
Показать ещё 3 комментария
Теги:
mysqli

2 ответа

1
Лучший ответ

Ваша первая проблема заключается в том, что вам удалось запутать mysqli (который вы на самом деле используете) с PDO.

Вторая проблема заключается в том, что ваш вывод ошибочен. Если бы вы выполняли запрос SELECT, вы видели, что этот запрос работает правильно.

Третьей проблемой является отсутствие сообщений об ошибках mysqli. Добавьте эту строку перед подключением:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

и вы сможете увидеть ошибку mysql, преобразованную в исключение PHP. Скорее всего, это будет вставлять нулевое значение, если не разрешено null

  • 0
    Да. Это работа. Я получаю нужную ошибку: «Неустранимая ошибка: необработанное исключение« mysqli_sql_exception »с сообщением« Столбец «kbis_url» не может быть пустым ... »Спасибо
-1

Проверьте там: http://php.net/manual/en/pdo.error-handling.php

и там: http://php.net/manual/en/class.pdoexception.php

Перепишите свой код на:

try {
   <..>
   $SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $SQL->execute();
} catch (PDOException $e) {
   echo 'Something wrong: ' . $e->getMessage();
}
  • 0
    ничего с этим
  • 0
    Я Fatal error: Call to undefined method mysqli_stmt::setAttribute()
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню