在mysql中插入一个PHP false
我的MySQL表包含一个tinyint(1)值,我用它来存储真值或假值 我有以下PHP变量:在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
$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))