【问题标题】:INSERT into DB table with PDO prepare and bindParam使用 PDO 准备和 bindParam 插入数据库表
【发布时间】:2013-11-05 03:50:29
【问题描述】:

简单来说,有人可以解释我在这里做错了什么 - 我只是尝试使用 prepare 和 bindParam 插入数据库,这是在所有字段中插入 0 和 Null。

$sql = $db->prepare("INSERT INTO db_fruit VALUES (id=? ,type=? ,colour=?)");
$sql->bindParam(1, $newId);
$sql->bindParam(2, $type);
$sql->bindParam(3, $colour);
$sql->execute()

顺便说一句:这个方法一直适用于我的 UPDATE 等,但在这种情况下不适用于 INSERT

【问题讨论】:

    标签: php pdo sqlbindparameter


    【解决方案1】:

    你的语法不正确,试试这个:

    $sql = $db->prepare("INSERT INTO db_fruit (id, type, colour) VALUES (? ,? ,?)");
    $sql->bindParam(1, $newId);
    $sql->bindParam(2, $name);
    $sql->bindParam(3, $colour);
    $sql->execute();
    

    【讨论】:

    • 不需要大逗号。
    • 你去@Jonast92
    【解决方案2】:

    扩展 A.O 的答案,以下也是有效的:

    $sql = $db->prepare("INSERT INTO db_fruit (id, type, colour) VALUES (? ,? ,?)");
    $sql->execute(array($newId, $name, $color));
    

    还有:

    $sql = $db->prepare("INSERT INTO db_fruit (id, type, colour) VALUES (:id, :name, :color)");
    $sql->execute(array('id' => $newId, 'name' => $name, 'color' => $color));
    

    可能只是个人喜好,但我发现这种语法更简洁。

    【讨论】:

    • 我被引导相信(可能是错的,非常绿色)bindParam 是安全的,可以替换 my_real_escape_string。你的方法安全吗?
    • @gavin 是的。 PDO 绑定参数就像您分别为每个调用 bindParam() 一样。
    【解决方案3】:
    $sql = $db->prepare("INSERT INTO db_fruit (`id`, `type`, `colour`) VALUES (:id, :name, :colour)");
    $sql->bindParam(':id', $newId, PDO::PARAM_INT);
    $sql->bindParam(':type', $type, PDO::PARAM_INT);
    $sql->bindParam(':colour', $colour, PDO::PARAM_STR);
    $sql->execute();
    

    【讨论】:

    • 您不必将数组放在execute 中,因为您已经在bindParam 中拥有值
    猜你喜欢
    • 1970-01-01
    • 2018-02-18
    • 2013-07-27
    • 2013-05-11
    • 2012-04-09
    • 2017-09-19
    • 2013-02-25
    • 2016-11-29
    • 1970-01-01
    相关资源
    最近更新 更多