Php 准备好的语句不能使用整数值执行多次
如何使用不同的整数值正确地重新执行准备好的语句 在重用ODBC准备的语句时,显式和隐式绑定Php 准备好的语句不能使用整数值执行多次,php,sql-server,pdo,odbc,prepared-statement,Php,Sql Server,Pdo,Odbc,Prepared Statement,如何使用不同的整数值正确地重新执行准备好的语句 在重用ODBC准备的语句时,显式和隐式绑定PDO::PARAM_INT存在致命错误 创建表mytab( 上校, 瓦查尔(20) ); 作品:多个字符串 作品:单整数 不工作:多个整数 它实际上成功地插入了第一条记录1,但在下一次执行时尝试重用该语句时失败 PHP致命错误:未捕获PDOException:SQLSTATE[22018]:强制转换规范的无效字符值:206[Microsoft][ODBC Driver 13 for SQL Server
PDO::PARAM_INT
存在致命错误
创建表mytab(
上校,
瓦查尔(20)
);
作品:多个字符串
作品:单整数
不工作:多个整数
它实际上成功地插入了第一条记录1
,但在下一次执行时尝试重用该语句时失败
PHP致命错误:未捕获PDOException:SQLSTATE[22018]:强制转换规范的无效字符值:206[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]操作数类型冲突:文本与int不兼容(SQLExecute[206]at/build/php7.0-lPMnpS/php7.0-7.0.8/ext/pdo_ODBC/ODBC_stmt.c:260)
我正在使用
我已经试着把整件事都包装起来 我也尝试过使用,但它抛出了完全相同的错误 作品 不起作用 我认为有趣的是,我在使用PHP5.6.9时得到了与此完全相同的错误。然而,他们甚至不能执行一条语句,所以我想知道,考虑到抛出错误的确切行已从移动到,是否存在部分补丁 变通办法 如果我在循环中准备语句,那么它工作得很好。但是我读到这是非常低效的,我应该能够重用该语句。我特别担心将其用于海量数据集。这样行吗?我能做些更好的事吗
$values = [1,3,5,7,9,11];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
foreach ($values as $value){
$stmt = $pdoDB->prepare($sql);
$stmt->execute(['col'=>$value]);
}
对于准备好的语句,通常必须在循环外使用
bindParam
bindParam
是一个单独的步骤execute
$stmt = $pdoDB->prepare("INSERT INTO mytab (col, key) VALUES (:col, :key)");
// bind params (by reference)
$stmt->bindParams(":col", $col, PDO::PARAM_STR); //bind variable $col
$stmt->bindParams(":key", $key, PDO::PARAM_INT); //bind variable $key
$values = ['here','are','some','values'];
foreach ($values as $i => $value) {
$col = $value; //set col
$key = $i; //set key
$stmt->execute();
}
不知道这是否有帮助,但如果表只有一个int列,它是否可以工作?DavidG nope,我也明确地测试了它。如果在循环外绑定到某个var,它可以工作吗,然后在循环内部只更新该var的值并调用execute only?如果使用
$stmt->execute(['col'=>intval($value]),它是否有效代码>?
$values = [1,3,5,7,11];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value)
$stmt->execute(['col'=>$value]);
$values = [1];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value){
$stmt->bindParam('col', $value, PDO::PARAM_INT);
$stmt->execute();
}
$values = [1,2];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value){
$stmt->bindParam('col', $value, PDO::PARAM_INT);
$stmt->execute();
}
$values = [1,3,5,7,9,11];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
foreach ($values as $value){
$stmt = $pdoDB->prepare($sql);
$stmt->execute(['col'=>$value]);
}
$stmt = $pdoDB->prepare("INSERT INTO mytab (col, key) VALUES (:col, :key)");
// bind params (by reference)
$stmt->bindParams(":col", $col, PDO::PARAM_STR); //bind variable $col
$stmt->bindParams(":key", $key, PDO::PARAM_INT); //bind variable $key
$values = ['here','are','some','values'];
foreach ($values as $i => $value) {
$col = $value; //set col
$key = $i; //set key
$stmt->execute();
}