Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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/60.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
Php 使用Bindparam插入空值,但无错误不正确的整数值_Php_Mysql_Pdo_Bindparam - Fatal编程技术网

Php 使用Bindparam插入空值,但无错误不正确的整数值

Php 使用Bindparam插入空值,但无错误不正确的整数值,php,mysql,pdo,bindparam,Php,Mysql,Pdo,Bindparam,我想使用PDO在MySql表中插入一些数据。如果它不是空的,它将具有整数数据类型,因此我使用PDO::PARAM_INT,但问题是这个数据不是必需的,所以有时它是空的 这让我犯了一个错误: PDOException:SQLSTATE[HY000]:一般错误:1366不正确的整数值 那么,当这个空值变量为空值时,我是否可以将它传递到数据库中而不会出错?以下是我的代码片段: $stmt = $db->prepare("INSERT INTO table (column) VALUES (:co

我想使用PDO在MySql表中插入一些数据。如果它不是空的,它将具有整数数据类型,因此我使用PDO::PARAM_INT,但问题是这个数据不是必需的,所以有时它是空的

这让我犯了一个错误:

PDOException:SQLSTATE[HY000]:一般错误:1366不正确的整数值

那么,当这个空值变量为空值时,我是否可以将它传递到数据库中而不会出错?以下是我的代码片段:

$stmt = $db->prepare("INSERT INTO table (column) VALUES (:column)");
$stmt->bindParam(':column',$_POST['value'], PDO::PARAM_INT);
$stmt->execute();
空字符串仍然是不正确的整数值。尽管MySQL在过去是允许的,但现在它倾向于对类型更加严格,默认情况下强制使用,因此不再接受整数字段的空字符串

此外,PDO::PARAM_INT不会强制转换您的值

因此,您必须手动强制转换它们

如果您想保留一个可能的空值,请按如下方式转换您的输入

$value = is_null($_POST['value']) ? null : (int)$_POST['value'];
如果您想无条件地转换为整数,那么只需将其转换为整数即可

$value = (int)$_POST['value'];

这两个代码段都会将一个空字符串转换为0,MySQL将欣然接受该值。在我的示例中,我使用如下代码:

if(empty($_POST['value'])){ $value = NULL; } else { $value = $_POST['value']; }
$stmt->bindParam(':column', $value);

它最适合我,请从您的角度尝试:-

因此在这种情况下不可能使用Bindparam?很好,但我可以知道为什么Bindparam丑陋且无用吗?使用bindparam进行清理比使用bindparam更好吗?或者有任何比这更节省的方法吗?NULL和NULL之间没有区别,所以我不知道如何解决这个问题。将NULL转换为int也会在db中存储0,它不会将字段设置为NULL