2013-07-20 2 views
0

Мой сайт интегрирован с форумами phpbb, и я пытаюсь создать один файл php и один шаблон, чтобы вытащить уникальную страницу, используя разные строки в базе данных. Мои файлы примеров выглядеть следующим образом:Неизвестный столбец 'x' in 'where clause' [1054]

PHP файл:

<?php 
include "includes/phpbb.php"; 

$template->set_filenames(array(
'body' => 'people.html', 
)); 

$name = $_GET['name']; 
$result = $db->sql_query("SELECT * FROM people WHERE name = $name"); 
while($row = $db->sql_fetchrow($result)) 
{ 
$template->assign_vars(array(
'NAME'   => $row['name'], 
'AGE'   => $row['age'], 
    )); 
} 

$site->page_footer(); 

?> 

Вот шаблон HTML:

<!-- INCLUDE overall_header.html --> 

{NAME} is {AGE} years old. 

<!-- INCLUDE overall_footer.html --> 

У меня есть две строки в таблице. Один из них называется «Уолт» с возрастом «51», а другой «Джесси» с возрастом «25». ? Всякий раз, когда я вхожу в URL, как people.php имя = Уолт, я получаю страницу ошибки:

SQL ERROR [ mysqli ] 

Unknown column 'Walt' in 'where clause' [1054] 

SQL

SELECT * FROM people WHERE name = Walt 

Если я ввести числовое значение любого рода, он тянет страницу но никаких переменных не заполнено, поэтому на странице написано: «лет». Если я введу? Name = name, он подтягивает вторую строку в таблице базы данных и говорит: «Джесси 25 лет» (этот ДЕЙСТВИТЕЛЬНО меня озадачивает).

Что я делаю неправильно, чтобы вызвать это? Я, очевидно, хочу иметь возможность вводить «Уолт» или «Джесси» в URL-адрес и получать всю страницу только с их информацией.

ответ

1

Просто вам нужно приложить переменную в строку. Таким образом:

$result = $db->sql_query("SELECT * FROM people WHERE name = '$name'"); 

должен сделать трюк.

Будьте очень осторожны. Я думаю, что объект $db исходит от phpbb, и они будут дезинфицировать любой запрос базы данных перед его выполнением. Но слепое принятие пользователем запросов и запросов к базе данных без санитарии приведет к SQL-инъекции и миру боли. См What's the best method for sanitizing user input with PHP?

0

имя должно быть в кавычках:

$result = $db->sql_query("SELECT * FROM people WHERE name = '$name'"); 
Смежные вопросы