PDO insert语句错误 - 参数1是字符串而不是数组

时间:2017-07-30 09:46:51

标签: php mysql pdo

我正在将所有mysql编码转换为PDO并收到此错误 -

警告:PDO :: exec()期望参数1为字符串,数组在

中给出

以下是代码:

$ent_date = $array[1];
$ent_time = $array[2];
$card_no = $array[3];

try {
    $att = new PDO('mysql:host=localhost;dbname=att', 'root', '');
    $att->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $att1 = 'insert into att_detail (att_date,att_time,att_card_no) values (:date_ent,:time_ent,:cardno)';
    $att -> exec(array(
                        ':date_ent'=>$ent_date,
                        ':time_ent'=>$ent_time,
                        ':cardno'=>$card_no));
     echo "new record created";
    }
catch (PDOException $e){
                        echo $att . "<BR>" . $e->getMessage();
                     }

$att = null;

了解最快解决方法的任何帮助。

3 个答案:

答案 0 :(得分:1)

exec执行查询,此函数的参数是字符串

因此,以简单的方式exec可以与无占位符的查询文本一起使用:

$att1 = 'insert into att_detail (att_date,att_time,att_card_no) ...';
$att -> exec($att1);

要使用预准备语句,您需要按照手册操作并使用PDOStatement对象:

您的代码看起来像(简化版):

$att1 = 'insert into att_detail (att_date,att_time,att_card_no) values (:date_ent,:time_ent,:cardno)';
$stmt = $att->prepare($att1);
$stmt->execute(array(
    ':date_ent'=>$ent_date,
    ':time_ent'=>$ent_time,
    ':cardno'=>$card_no
));
echo "new record created";

另外,请务必了解execexecute之间的差异。

答案 1 :(得分:1)

您在exec使用execute不接受数组的手册PDO::exec php manual

我认为您要使用.ts而不是接受要绑定的参数数组是手册PDO::execute()

答案 2 :(得分:0)

$stmt = $att->prepare($att1);

$result = $stmt->execute(array(
                        ':date_ent'=>$ent_date,
                        ':time_ent'=>$ent_time,
                        ':cardno'=>$card_no));