2015-04-21 5 views
-1

Я рассмотрел некоторые другие ответы здесь относительно этого, но я продолжаю получать ошибки, поэтому здесь идет.PHP PDO выберите запись из базы данных, которая соответствует переменной

Когда пользователь посещает сайт, им предлагается указать свое имя и назначить случайное целое число. Когда они нажимают кнопку submit для ввода своего имени, форма отправляется и сохраняется в базе данных, и пользователь перенаправляется обратно на главную страницу. Если случайное число еще раз совпадает с номером, сохраненным в базе данных, это имя будет отображаться.

У меня нет проблем с введением значений в базу данных, но у меня возникают проблемы с их возвратом.

Мое соединение с базой данных в порядке, просто оставленные значения общие для этого вопроса.

<?php 
    $min=1; 
    $max=100; 
    $rand_number = rand($min,$max); 

    try { 
     $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
     //Set PDO Error Mode to Exception 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     //Prepare SQL 
     $stmt = $conn->prepare("select nickname from users where number=".$rand_number); 
     $stmt->execute(); 

     if (!$stmt) { 
      foreach($result as $row) { 
        echo $row['nickname']; 
      } 
     } 
    } 
?> 

Я получаю сообщение об ошибке, что что-то не так вокруг части, где я сопоставляю запрос с переменной.

+0

И это сообщение об ошибке было бы ...? – Phil

+0

Вы вставляете данные в базу данных с помощью случайного числа, и теперь вы пытаетесь выбрать из БД другое случайное число. См. Проблему? Это два случайных числа. Как они должны быть одинаковыми? –

+2

Откуда возникает '$ result? И ваш оператор 'if' корректен -« если запрос не сработает, а затем проведите через результирующий набор »? –

ответ

2

Единственное, что я действительно вижу, - это получить данные. Вы можете использовать один из методов fetch*PDOStatement или просто выполнить итерацию самой инструкции (она реализует Traversable).

Кроме того, вы должны использовать привязку параметров.

$stmt = $conn->prepare('SELECT `nickname` FROM `users` WHERE `number` = ?'); 
$stmt->execute([$rand_number]); 
while($nickname = $stmt->fetchColumn()) { 
    echo $nickname; 
} 
+1

нет ключевого слова' number' в зарезервированных словах https://dev.mysql.com/doc/refman/5.5/ru/reserved-words.html , ближайший из них является «числовым», но да, убирающая часть отсутствует или может быть усечена в кодах – Ghost