我试图通过这两个查询在我的数据库中插入准备好的语句多个值,这两个查询都发生故障,返回其中一个
未捕获错误:调用未定义的方法 mysqli_stmt::bindValue()
第一个代码或
未捕获的 ValueError:mysqli_stmt::execute():参数 #1 ($params) 必须是列表数组
第二个。当我输入 list
而不是 array
时,它显示
语法错误
注意所有变量、表和列名称都是简化的变体
我见过很多类似的问题,但没有一个能回答我的问题。甚至不是这个“重复”的那个。
有人有解决方案,或者替代方案吗?
这是两个代码:
if(isset($_POST['ID'], $_POST['atr1'])){ $sql = $db -> prepare("INSERT INTO some_table (ID, atr_place) VALUES (':fir', ':sec')"); $sql -> bindValue(':fir', $_POST['ID'],); $sql -> bindValue(':sec', $_POST['atr1'],); $sql -> execute(); }
$sql = $db -> prepare("INSERT INTO some_table (ID, atr_place) VALUES (:fir, :sec)"); $sql -> execute(array( ':fir' => $_POST['ID'], ':sec' => $_POST['atr1'], ));
P粉3735968282024-02-04 14:00:15
正如错误消息所表明的那样,您正在使用 mysqli a> 与您的数据库进行通信的库。但是,您的代码似乎基于使用 PDO 的示例,其中是一个完全不同的图书馆。虽然表面上一些函数名称相似,但实际上它们具有不同的 API 和要求。
例如,一些 API 差异是:
?
指定的匿名占位符此代码应该与 mysqli 一起使用:
如果您有 PHP 8.1 或更高版本:
$sql = $db->prepare("INSERT INTO some_table (ID, atr_place) VALUES (?, ?)"); $sql->execute([$_POST['ID'], $_POST['atr1']]);
否则:
$sql = $db->prepare("INSERT INTO some_table (ID, atr_place) VALUES (?, ?)"); $sql->bind_param("ss", $_POST['ID'], $_POST['atr1']); $sql->execute();