почему этот php-код не работает?

#php #mysql

#php #mysql

Вопрос:

У меня есть база данных, содержащая некоторую информацию. (адрес электронной почты и имя)

У меня есть форма для ввода электронного письма, и я хочу распечатать имя, которое принадлежит этому электронному письму.

 $test = $_POST['mail']; //the html code works, $test prints out the email given.

$question = mysql_query("SELECT name FROM mydb WHERE email = '".$_POST['mail']."'")or die(mysql_error());

while($foo = mysql_fetch_assoc($question))
{
echo $test . " - ";
echo $foo;
}
 

почему foo не выводится как имя? Пока он Array по какой-то причине выводится.

Спасибо

Комментарии:

1. mysql_real_escape_string

Ответ №1:

прочитайте руководство mysql_fetch_assoc

Возвращает ассоциативный массив строк, который соответствует выбранной строке.

чтобы получить данные, вам нужно написать $foo['name'] ;

Комментарии:

1. Спасибо! Мне удалось понять это до того, как я прочитал ответы. Вы, ребята, быстрые, лол

Ответ №2:

Пожалуйста, привыкайте к заполнителям, чтобы избежать инъекционных атак. mysql_fetch_assoc() и mysqli::fetch_assoc эквивалентны в том смысле, что оба они возвращают ассоциативный массив; Я просто нахожу объектно-ориентированную версию более чистой.

 <?php
$stmt = $dbh->prepare("SELECT name FROM mydb WHERE email = ?");
if ($stmt->execute(array($_POST['mail']))) {
    while ($row = $stmt->fetch_assoc()) {
      echo $test . " - " . echo $foo['name'];
    }
}
?>
 

Ответ №3:

Потому что это массив (как указано mysql_fetch_assoc() ) (и, возможно, для того, чтобы другое приложение не было доступно для SQL-инъекций). Вы должны использовать индекс для доступа к значению ячейки:

 $foo['name']
 

Ответ №4:

 $test = mysql_real_escape_string($_POST['mail']);

$question = mysql_query("SELECT name, foo FROM mydb WHERE email = '$test'")or die(mysql_error());

while($foo = mysql_fetch_assoc($question)) { 
echo $test =  $foo['name'] ;
echo $foo = $foo['foo'] ; 
}