嵌套MYSQLi函数

时间:2017-06-28 08:09:18

标签: php mysqli

这个问题涉及嵌套mysqli函数。我不确定“嵌套”一词是否正确,所以我会解释 例如,查看此代码:

$query = 'SELECT id FROM users WHERE id="' . $_POST['uid'] . '"';
$result = $mysqli->query($query);
$user_id = mysqli_fetch_row($result);

上面的代码可以转换为简写版本,如下所示:

$user_id = mysqli_fetch_row($mysqli->query('SELECT id FROM users WHERE id="' . $_POST['uid'] . '"'));

我知道这是有效的,因为我已经尝试过了。我看到PHP正在处理来自“由内而外”的代码,它基本上是一种编写此代码的递归方法,还是完全不符合这些条款?

我的问题是,这适用于所有MYSQL命令或PHP函数吗?这个功能有例外吗?使用这种形式有什么缺点? (除了程序员不那么可读

编辑:我知道查询不是准备好的声明。

1 个答案:

答案 0 :(得分:3)

为了调用函数或类方法,PHP必须评估它提供的所有参数。

在这种情况下,给出声明:

$user_id = mysqli_fetch_row($mysqli->query("SELECT id FROM users WHERE id = $_POST[uid]"));
  • 为了调用mysqli_fetch_row,PHP将首先评估其参数,即$mysqli->query("SELECT id FROM users WHERE id = $_POST[uid]")
  • 为了调用$mysqli->query,PHP将首先评估其参数,即"SELECT id FROM users WHERE id = $_POST[uid]"
  • 现在PHP会将查询字符串传递给$mysqli->query并返回结果集(或者可能是错误)
  • 返回值将传递给mysqli_fetch_row

我想说这不是特定于PHP的,而是参数评估中非常普遍的行为。

然而,它有一个主要缺点:你放弃任何类型的错误检查,尤其是在处理数据库时,这是非常重要的。