通过预准备语句插入插入的 PDO [已关闭]

2022-08-30 11:18:22

在PHP:数据对象的丛林中,我遇到了通过准备好的语句执行MySQL查询的问题。

请遵守以下代码:

$dbhost = "localhost";
$dbname = "pdo";
$dbusername = "root";
$dbpassword = "845625";

$link = new PDO("mysql:host=$dbhost;dbname=$dbname","$dbusername","$dbpassword");

$statement = $link->prepare("INSERT INTO testtable(name, lastname, age)
        VALUES('Bob','Desaunois','18')");

    $statement->execute();

这就是我,我想在我的数据库中。然而,我一直迷失在里面。井。。我不知道!根据谷歌的说法,这是做到这一点的方法,尽管我的数据库保持空白。

我在这里错过了什么吗?因为我现在已经困了好一个小时,想继续学习PDO!


答案 1

你应该像这样使用它

<?php
$dbhost = 'localhost';
$dbname = 'pdo';
$dbusername = 'root';
$dbpassword = '845625';

$link = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword);

$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
    VALUES (:fname, :sname, :age)');

$statement->execute([
    'fname' => 'Bob',
    'sname' => 'Desaunois',
    'age' => '18',
]);

预准备语句用于清理输入,为此,您可以在 SQL 中不使用任何单引号来绑定变量,然后在函数中传入在 SQL 语句中定义的变量的关联数组。:fooexecute()

您也可以使用代替然后传入一个仅值的数组来输入,如下所示;?:foo

$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
    VALUES (?, ?, ?)');

$statement->execute(['Bob', 'Desaunois', '18']);

这两种方式都有其优点和缺点。我个人更喜欢绑定参数名称,因为它更容易阅读。


答案 2

我刚刚将代码重写为以下内容:

    $dbhost = "localhost";
    $dbname = "pdo";
    $dbusername = "root";
    $dbpassword = "845625";

    $link = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbusername, $dbpassword);
    $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $statement = $link->prepare("INSERT INTO testtable(name, lastname, age)
        VALUES(?,?,?)");

    $statement->execute(array("Bob","Desaunois",18));

它现在似乎有效。但。如果我故意导致错误发生,它不会说有任何错误。代码有效,但仍然有效;如果我遇到更多的错误,我不会知道为什么。


推荐