Вставьте значения NULL в записи MySql, используя MySqli - PullRequest
3 голосов
/ 15 апреля 2011

Моя страница отправляет используя ajax-данные в php-скрипт.одна из переменных, которую получает скрипт: $ product_disc теперь небольшой тест, который я провел внутри скрипта, ясно показал, что $ product_disc равен нулю.the test:

if ($product_disc == null)
 {$test="null";}
 else {$test="not null";}

Я заставляю свой код возвращать $ test в вызывающую процедуру ajax:

$return_array['success'] = array ('test' => $test);

И, используя Firebug, я вижу, что ответ ajax имеет: "test": "null "
Итак, я заключаю, что $ product_disc имеет значение: null

Теперь внутри моего скрипта я использую следующий код для вставки данных в базу данных MySql:

$stmt = mysqli_prepare($link, "INSERT INTO set_products (id,discount) VALUES (NULL , ?)");
mysqli_stmt_bind_param($stmt, "i", $product_disc);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);

Запрос выполняется, но введенное значение равно 0, а не NULL!
Только когда я явно добавил: $ product_disc = null;перед инструкциями MySqli было вставлено значение NULL.

Почему это так?В чем разница между нулем и нулем?Я следовал за этим ответом в stackoverflow, надеясь, что я мог бы легко вставить NULL, но потом возникла эта проблема ...

Спасибо!

PS @stackoverflow team - Ваша проверка орфографиисловарь не распознает слово stackoverflow!

1 Ответ

4 голосов
/ 15 апреля 2011

Вы готовите product_disc как целое число, ноль не является целым числом. Преобразуется в 0.

При подготовке в виде строки определенно исправит вашу проблему, но она побеждает цель подготовки оператора mysql. Рассмотрим это решение:

mysqli_stmt_bind_param($stmt, $product_disc==null?'s':'i', $product_disc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...