Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中插入一个PHP false_Php_Mysql_Data Conversion - Fatal编程技术网

在mysql中插入一个PHP false

在mysql中插入一个PHP false,php,mysql,data-conversion,Php,Mysql,Data Conversion,我的MySQL表包含一个tinyint(1)值,我用它来存储真值或假值 我有以下PHP变量: $name = ''; $description = ''; $active = true; 现在我的SQL查询如下: $query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', $active) "; 只有在$active的值为真时,此选项才有效。一旦激活变量为f

我的MySQL表包含一个tinyint(1)值,我用它来存储真值或假值

我有以下PHP变量:

$name = '';
$description = '';
$active = true;
现在我的SQL查询如下:

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', $active) ";
只有在$active的值为真时,此选项才有效。一旦激活变量为false,php将插入一个空字符串,而不是0,因此查询将失败

在这种查询中使用false的最佳方法是什么

是否应手动将false转换为“0”字符串? 在PHP端立即使用stings是否更好?换句话说,声明:$active='1'; 或者我可以让PHP始终将false转换为“0”字符串吗

谢谢
Michael

首先,应使用mysql\u real\u escape\u string或mysqli\u real\u escape\u 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)).")";

将变量转换为int:

intval($active)

使用mysql\u real\u escape\u字符串函数

$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))).")";

可能的重复应该在数据库中真正使用数据类型
bit(1)
。这将只允许
0
(假)和
1
(真)输入。谢谢。根据我的实际代码,我简化了这个问题很多。所有字符串都正确转义:-)我希望在不转换数据类型的情况下找到解决方案,但我想这是不可能的。为了避免双重数据类型转换,我使用了$bool?'1':'0',正如您的第一个示例所示,但返回的字符串不是整数。感谢PHP,用于将单个位转换为
mysql\u real\u escape\u字符串(((int)$active))