PDO和字母数字字符串?

时间:2012-06-21 16:20:04

标签: php pdo

从命令行运行此错误时的当前错误是“在非对象上调用成员函数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();
}

3 个答案:

答案 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();
}