-1

我刚刚完成了我的第一个准备好的声明,出于安全原因转换为使用它们。我已经对其进行了测试并且它可以工作,但是我正在寻找关于代码本身的反馈(欢迎提出建设性的批评),尽管我知道它是相当基本的。另外,我有几个疑问:

  1. mysqli_escape_string如果您使用准备好的语句,我是否正确地说您不需要使用?
  2. 使用该mysqli_stmt_get_result功能会减少我必须做的写作量并同样有效吗?
  3. mysqli_stmt_close有必要使用吗?我是否正确地说如果不使用此功能,我将无法在该脚本中创建另一个准备好的语句?

这是我的代码:

<?php
//prepared statement example
include 'database.php';
$query = "SELECT ID FROM users WHERE email = ?";
$email = 'myemail@gmail.com';
$statement = mysqli_stmt_init($connect);

mysqli_stmt_prepare($statement, $query);
mysqli_stmt_bind_param($statement, 's', $email);
mysqli_stmt_execute($statement);
mysqli_stmt_bind_result($statement, $id);
mysqli_stmt_fetch($statement);

echo $id;
?>
4

1 回答 1

2

如果您使用准备好的语句,我是否正确地说您不需要使用 mysqli_escape_string?

是的。你问这个问题是不好的迹象——意味着你没有清楚地理解所有这些混乱是如何运作的。

使用 mysqli_stmt_get_result 函数会减少我必须做的写作量并且同样有效吗?

是的。但这里有一个坏消息:并不总是支持。因此,在某些安装上它不起作用。

有必要使用 mysqli_stmt_close 吗?我是否正确地说如果不使用此功能,我将无法在该脚本中创建另一个准备好的语句?

为什么,不。
您可以简单地将另一个准备好的语句重新创建到此变量中。

顺便说一句,强烈建议在 mysqli上使用PDO 。它更加一致和用户友好。
只需尝试绑定一个数组以在IN()运算符中使用并查看。

毕竟,它需要的代码少了 2 倍:

$stm = $pdo->prepare($query);
$stm->execute(array($email));
$id = $stm->fetchColumn();
于 2013-03-10T16:51:03.627 回答