我正试着准备好陈述。
基本上,我会像往常一样进行插入:
$sql = '
INSERT INTO customers
(customer_first, customer_last, customer_address, customer_email)
VALUES
(' . mysql_real_escape_string($_POST['customer_first']) . ',
' . mysql_real_escape_string($_POST['customer_last']) . ',
' . mysql_real_escape_string($_POST['customer_address']) . ',
' . mysql_real_escape_string($_POST['customer_email']) . ' )
';
mysql_query($sql);
据我所知,有一种更安全的方法可以使用预备语句来做到这一点。
到目前为止,我认为它是这样完成的:
$stmt = $dbh->prepare("INSERT INTO customers (customer_first, customer_last, customer_address, customer_email) VALUES (:customer_first, :customer_last, :customer_address, :customer_email)");
$stmt->bindParam(':customer_first', $_POST['customer_first']);
$stmt->bindParam(':customer_last', $_POST['customer_last']);
$stmt->bindParam(':customer_address', $_POST['customer_address']);
$stmt->bindParam(':customer_email', $_POST['customer_email']);
$stmt->execute();
这是对的吗?或者有更好的方法来做我想要实现的目标吗?如果我尝试以上操作,我会收到错误“在非对象上调用成员函数prepare()” - 这是什么意思?
我正在使用示例@ http://php.net/manual/en/pdo.prepared-statements.php。它指的是$ dbh - 它从哪里得到的?是否应该在其他地方引用$ dbh - 我假设它与数据库连接有关?
除了这些问题之外,我还可以使用像上面这样的预处理语句来使用mysql_insert_id()或mysql_error()之类的东西吗?
答案 0 :(得分:1)
如果您不熟悉OOP,可以从mysqli开始,以获得更加熟悉的功能和语法以及对函数式编程的支持,但如果您准备好处理OOP,则值得查看PDO class
值得回顾以帮助决定从哪里开始:mysqli or PDO - what are the pros and cons?
它指的是$ dbh - 它在哪里 得到的?是$ dbh应该是 别处引用 - 我假设它 与数据库有关 连接?
$ dbh =数据库句柄(在PDO > Connections and Connection Management doc中定义)
我还可以使用像 mysql_insert_id()或mysql_error() 使用上面准备好的陈述?
答案 1 :(得分:1)
错误消息表明您的问题出在$dbh
对象上 - 它是如何初始化的?