从命令行运行此错误时的当前错误是“在非对象上调用成员函数bindParam()”我已经解决了变量$ orderPO的问题。有些东西不喜欢非数字字符,这导致我无法使用bindParam PARAM_STR业务。数据库字段都是varchar 50.
我的搜索技巧让我失望。我知道这必须发布大约一百万次,但我似乎无法找到它。如果有人有更好的想法,我完全愿意以另一种方式做这件事。
当前尝试代码:
try
{
$orderNum = '123456';
$orderPO = '123456-A';
$dbh = new PDO("mysql:host=localhost;dbname=dbname", 'someuser', 'somepass');
$stm = $dbh->prepare("insert into some_table (order_number, order_po)");
$stm->bindParam(':order_number', $orderNum, PDO::PARAM_STR);
$stm->bindParam(':order_po', $orderPO, PDO::PARAM_STR);
$stm->execute();
print_r($stm);
print_r($dbh);
$arr = $stm->errorInfo();
print_r($arr);
$stm->closeCursor();
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
答案 0 :(得分:2)
为了使用PDO绑定参数,您需要使用占位符,如下所示:
$stm = $dbh->prepare("
INSERT INTO `some_table` SET
`order_number` = :order_number,
`order_po` = :order_po
");
$stm->bindParam(':order_number', $orderNum, PDO::PARAM_STR);
$stm->bindParam(':order_po', $orderPO, PDO::PARAM_STR);
请注意在命名占位符之前包含:
字符。我还在您的查询中添加了列名称。
进一步阅读并查看示例:PDO bindParam
答案 1 :(得分:0)
正确的语法是
$stm = $dbh->prepare("insert into some_table (order_number, order_po) VALUES (?, ?)");
$stm->bindParam(1,$orderNum);
$stm->bindParam(2,$orderPO);
包含问题标记,bindParam调用中的数字指的是您将参数绑定到哪个问号
答案 2 :(得分:0)
您正在尝试使用bindparam,但绑定param匹配?不是游标:。您尚未包含任何参数或值。
此外,您在查询中缺少VALUES语句,这导致查询失败。这就是为什么你得到“对非对象的成员函数bindParam()的调用”
要使用:value语法,请使用bindValue,而不是bindParam。要使用bindParam,将:value切换为?在您的查询中,按顺序将它们编号为执行数组。
try
{
$orderNum = '123456';
$orderPO = '123456-A';
$dbh = new PDO("mysql:host=localhost;dbname=dbname", 'someuser', 'somepass');
$stm = $dbh->prepare("insert into some_table (order_number, order_po) VALUES (:order_number, :order_po)");
$stm->bindvalue(':order_number', $orderNum, PDO::PARAM_STR);
$stm->bindvalue(':order_po', $orderPO, PDO::PARAM_STR);
$stm->execute();
print_r($stm);
print_r($dbh);
$arr = $stm->errorInfo();
print_r($arr);
$stm->closeCursor();
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}