在 PHP 中创建准备好的语句

Posted

技术标签:

【中文标题】在 PHP 中创建准备好的语句【英文标题】:Creating a prepared statement in PHP 【发布时间】:2017-12-27 23:34:49 【问题描述】:

我想编写一个php 脚本,其中我必须使用准备好的语句在mysql 数据库中执行INSERT 查询。

因为我是PHP 的初学者,所以我不知道该怎么做。所以我在*** 上查找它并找到了这个How to create a secure mysql prepared statement in php? 。

所以我开始以与在答案中接受的答案 BUT 中相同的方式进行操作,使用了一些方法,例如

    prepare 准备SELECT 查询

    bind_param 绑定参数到查询

    close 接近$stmt

Visual Studio Code 在我尝试使用它们时没有向我建议。此外,当我使用这些方法并将指针悬停在它们上方时,Visual Studio Code 没有显示任何文档,这让我思考这些方法是否可用。

Visual Studio Code 建议 odbc_prepare,而不是 prepare 方法,而不是 bind_param,它建议 mysqli_bind_param,而不是 close,它建议 odbc_close

我正在使用PHP 7.2

问题:prepareclosebind_param 这样的方法在PHP 7 中不可用吗?我可以使用Visual Studio Code 向我建议的方法来代替这些方法吗?

【问题讨论】:

php.net/manual/en/book.pdo.php "问题:PHP 7 中是否不提供 prepare、close、bind_param 等方法,我可以使用 Visual Studio Code 建议的方法来代替这些方法吗?" - 为什么它们在 php 7 中不可用?发帖前你根本没有看手册吗? @FunkFortyNiner 我确实浏览了文档。根据 Gant 的 回答,preparebind_param 只能与 mysqli 前缀一起使用,但请查看此 Prepared Statements,他们在其中使用了 preparebind_param 方法mysqli 对象。我也在做同样的事情,但Visual Studio Code 根本没有建议这些方法。 因为 VSC 不专注于 php !您不会看到有关所有功能和方法的建议,那里有一些 php IDE 可以提供更多建议。只需谷歌“PHP IDE”(我个人使用 atom,它不建议 99% 的 php 函数,并且根本没有方法建议!但仍然喜欢它,干净且比 VSC 更快) 【参考方案1】:

这些功能不是独立的功能。它们是 PDO 对象的方法。要了解有关 PDO 的更多信息,请查看本教程:PDO Tutorial

$pdo = new PDO();
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email AND status=:status');
$stmt->execute(['email' => $email, 'status' => $status]);
$user = $stmt->fetch();

【讨论】:

【参考方案2】:

您只能在带有mysqli_ 前缀的程序样式中使用没有mysqli 对象的这些函数。

然而,面向对象的风格通常是首选。

PHP.net has a comparison of the two approches.

【讨论】:

看看Prepared Statements,他们在mysqli 对象中使用了这些方法。当我使用对象方法时,不建议使用这些方法,仅在使用过程方法时才建议使用。

以上是关于在 PHP 中创建准备好的语句的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 准备好的语句 MySQL 错误

如何使用多个 for 循环在 php 中创建 sql 语句

在 PHP 中到处使用准备好的语句? (PDO)

如何在一个查询中创建两个更新语句?

PHP:使用准备好的语句进行注入保护

使用 PhP 执行准备好的语句