为什么我准备好的陈述不起作用?

时间:2017-02-09 05:26:17

标签: php mysqli prepared-statement

这样可行:

$name=mysqli_real_escape_string($conn,$_POST['name']);
$password=mysqli_real_escape_string($conn,$_POST['password']);
$sql= "SELECT password FROM Accounts WHERE username='$name';";
$result= $conn->query($sql);
$row=mysqli_fetch_assoc($result);

但这不是:

$name=mysqli_real_escape_string($conn,$_POST['name']);
$password=mysqli_real_escape_string($conn,$_POST['password']);
//$sql= "SELECT password FROM Accounts WHERE username='$name';";

$stmt = $conn->prepare("SELECT password FROM Accounts WHERE username=?");
$stmt->bind_param("s",$name);
$stmt->execute();
$result= $stmt->get_result();

$row=mysqli_fetch_assoc($result);
$stmt->close();

为什么第一个会起作用,而不是第二个起作用?我的服务器上安装了PHP 7。我想让输入安全,以避免SQL注入,但准备好的语句由于某种原因不起作用

编辑:所以使用bind_param()和fetch()修复了我的问题。但我仍然很好奇为什么get_result()不起作用。 get_result()是否只提供所选的值,而我的旧$ result = query()返回整行?

我的猜测可能是两种方法返回不同类型的数据/格式?

0 个答案:

没有答案