2016-04-13 2 views
0

Попытка просто создать что-то, чтобы убедиться, что имя пользователя = пароль через NUM_ROWS = 1.Подготовленные отчеты Выберите с переменными PHP -

Попытка использовать подготовленные заявления, что я никогда не использовал раньше, и я что-то отсутствует. Где происходит переменная var в bind_results ('s', $ variable)?

Кроме того, его просто не работает для меня.

<?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(); 

?> 
+0

Привет! не используют жестко закодированную строку в функции bind_result. Используйте всегда переменные. В вашем случае: $ sString = "ss"; $ stmt-> bind_result ($ sString, $ username); –

+0

Хорошо, спасибо, сделаю это. Любые другие предложения, чтобы сделать эту работу? –

+0

Вы можете проверить эту ссылку, у вас есть много ответов на ваш вопрос http://stackoverflow.com/questions/18753262/example-of-how-to-use-bind-result-vs-get-result –

ответ

0

Я вижу три проблемы с этим:

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

во-первых, bind_resultPHP documentation:

"Связывает столбцов в наборе результатов переменным."

Я думаю, что вы ищете bind_param. PHP documentation:

«Привязать переменные для маркеров параметров в операторе SQL, который был принят в mysqli_prepare().»

Во-вторых, ваше заявление имеет два маркера параметра (?), привязку оператор указывает две строки (ss), но дают только одну переменную ($username).

В-третьих, $username - это не то, что вы получаете от $_POST['username']. Вы назначили его $user. $username для подключения к базе данных.

Я думаю, что он должен работать для вас с этой линией вместо:

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

Спасибо, я думал, что функция bind привязывает что-то к новой переменной, поэтому у меня там другая! Смущены подготовленные заявления. –

+0

Я бы предложил пройти через некоторые из примеров в документации PHP, которую я связал. Они могут быть полезны, чтобы увидеть, как это работает, когда вы начинаете. Хотя, честно говоря, я бы предположил, что использовать pdo, а не mysqli, потому что я думаю, что это облегчает работу с подготовленными операторами. Просто мое мнение. –

Смежные вопросы