准备语句选择变量 - php

时间:2016-04-13 21:12:21

标签: php mysqli

尝试通过num_rows = 1来设置确认用户名=密码的内容。

尝试使用我从未使用过的预备语句,并且我遗漏了一些东西。 bind_results(' s',$ variable)中的var来自哪里?

此外,它只是不适合我。

<?php

require ($_SERVER['DOCUMENT_ROOT'].'/db-connect.php');

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$user = $_POST['username'];
//$user = $mysqli->real_escape_string($user);//
$password = $_POST['password'];
//$password = $mysqli->real_escape_string($password);//

if ($stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?")) {

    $stmt->bind_result('ss', $username);

    $stmt->execute();
    $result = $stmt->num_rows;

    echo $result;

    $stmt->close();
}

$mysqli->close();

?>

1 个答案:

答案 0 :(得分:0)

我发现有三个问题:

$stmt->bind_result('ss', $username);

首先,bind_result PHP documentation

  

&#34;将结果集中的列绑定到变量。&#34;

我认为您正在寻找bind_paramPHP documentation

  

&#34;在传递给mysqli_prepare()的SQL语句中绑定参数标记的变量。&#34;

其次,您的语句有两个参数标记(?),您的绑定语句指示两个字符串(ss),但您只提供一个变量($username)。

第三,$username不是您从$_POST['username']获得的。{1}}。您已将其分配给$user$username用于数据库连接。

我认为这应该适合你这条线:

$stmt->bind_param('ss', $user, $password);