Вставьте ложный PHP в MySQL - PullRequest
5 голосов
/ 26 декабря 2011

Моя таблица MySQL содержит значение tinyint (1), которое я использую для хранения значения true или false.

У меня есть следующие переменные PHP:

$name = '';
$description = '';
$active = true;

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

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', $active) ";

Это будет работать только в том случае, если мое значение $ active равно true. Как только активная переменная имеет значение false, php вставит пустую строку вместо 0 и, следовательно, запрос не будет выполнен.

Как лучше всего использовать false в таком запросе?

Должен ли я вручную преобразовывать false в строку '0'? Лучше сразу использовать строчки на стороне PHP? другими словами объявлять: $ active = '1'; или я могу как-то заставить PHP всегда преобразовывать false в строку '0'?

Спасибо Michael

Ответы [ 3 ]

6 голосов
/ 26 декабря 2011

Преобразуйте вашу переменную в int:

intval($active)
5 голосов
/ 26 декабря 2011

Прежде всего ваши значения должны быть экранированы с помощью mysql_real_escape_string или mysqli_real_escape_string или другого метода, подходящего для подключения к базе данных, чтобы избежать внедрения sql, тогда для вашего конкретного вопроса относительно false вы можете сделать что-то подобное:

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', ".($active?1:0) .")";

или приведение $ active к int также должно выполнить работу:

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', ".((int) $active)).")";
0 голосов
/ 26 декабря 2011

использовать функцию mysql_real_escape_string ...

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('".mysql_real_escape_string($name)."', '".mysql_real_escape_string($description)."', ".mysql_real_escape_string (((int) $active))).")";
...