PHP PDO:使用预准备语句进行安全高效的 MySQL 插入
准备好的语句对于使用 PDO(PHP 数据对象)在 PHP 中进行安全、高效的数据库交互至关重要。 然而,常见的陷阱可能会导致插入失败。让我们来看看一个典型问题及其解决方案。
问题:不正确的方法
考虑这个看似正确的代码片段,尝试通过准备好的语句插入 MySQL:
<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();</code>
这段代码虽然在语法上有效,但经常失败。 数据库保持不变。
解决方案:正确的参数绑定
正确的方法是利用命名或未命名的占位符来安全地绑定参数:
使用命名占位符:
<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute([ 'fname' => 'Bob', 'sname' => 'Desaunois', 'age' => '18', ]);</code>
此版本使用命名占位符(:fname
、:sname
、:age
)和关联数组来绑定值。 由于其清晰性和可读性,这是推荐的方法。
使用未命名占位符:
或者,您可以使用未命名占位符 (?
):
<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (?, ?, ?)'); $statement->execute(['Bob', 'Desaunois', '18']);</code>
这里,数组中值的顺序必须严格匹配SQL语句中占位符的顺序。
为什么有效:防止 SQL 注入并提高性能
准备好的语句具有显着的优势:
通过正确利用带有参数绑定的准备好的语句,您可以确保 PHP 应用程序中安全且优化的数据库交互。
以上是为什么我的PDO准备语句无法插入数据到MySQL?的详细内容。更多信息请关注PHP中文网其他相关文章!