Php 使用Bindparam插入空值,但无错误不正确的整数值
我想使用PDO在MySql表中插入一些数据。如果它不是空的,它将具有整数数据类型,因此我使用PDO::PARAM_INT,但问题是这个数据不是必需的,所以有时它是空的 这让我犯了一个错误: PDOException:SQLSTATE[HY000]:一般错误:1366不正确的整数值 那么,当这个空值变量为空值时,我是否可以将它传递到数据库中而不会出错?以下是我的代码片段: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
$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