我刚刚完成了我的第一份准备好的声明,出于安全原因转换为使用它们。我已经对它进行了测试并且它有效但我正在寻找关于代码本身的反馈(建设性的批评欢迎),尽管我理解它是相当基本的。另外,我有几个疑问:
mysqli_escape_string
吗? mysqli_stmt_get_result
功能会减少我必须做的写作量并且有效吗?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;
?>
答案 0 :(得分:2)
如果您使用预准备语句,我说您不需要使用mysqli_escape_string吗?
是。这是你要问的不好的迹象 - 意味着你不清楚all that mess works是怎么回事。
使用mysqli_stmt_get_result函数会减少我必须做的写作量并且有效吗?
是。但这里有坏消息:并不总是支持。因此,在某些安装上,它将无法正常工作。
是否需要使用mysqli_stmt_close?我是否正确地说,如果不使用此功能,我将无法在该脚本中创建另一个预准备语句?
为什么,没有。
您只需在此变量中重新创建另一个预准备语句即可。
IN()
运算符中使用,并查看。
毕竟,它需要的代码少2倍:
$stm = $pdo->prepare($query);
$stm->execute(array($email));
$id = $stm->fetchColumn();