2013-03-25 3 views
0

У меня есть следующий PHP для доступа к БД для простого форума Я здание:Доступ к данным строки MySQL DB с помощью PHP

$sql = " 
    SELECT 
     categories.cat_id, 
     categories.cat_name, 
     categories.cat_description 
    FROM 
     categories 
    WHERE 
     categories.cat_id = '" . mysql_real_escape_string($_GET['id']) ."' 
";       
$result = mysql_query($sql); 

//If data is unable to be served... 
if (!$result) { 
    echo 'Category could not be displayed! Please try again later' . mysql_error(); 
} else { 
    if(mysql_num_rows($result) == 0) { 
     //This is the error code being displayed 
     echo 'Category does not exist!'; 
    } 
} 

Вот код для этого раздела БД:

CREATE TABLE categories(
    cat_id   INT(8) NOT NULL AUTO_INCREMENT, 
    cat_name  VARCHAR(255) NOT NULL, 
    cat_description VARCHAR(255) NOT NULL, 
    UNIQUE INDEX 
    cat_name_unique (cat_name), 
    PRIMARY KEY(cat_id) 
) 
TYPE=INNODB; 

Проблема: по какой-то причине запрос, похоже, не правильно выводит данные строки из БД, я не понимаю, почему он не работает. Тем не менее, я также новичок в MySQL и SQL в целом. Кто-нибудь есть идеи относительно того, что происходит? Проще говоря, почему запрос MySQL не обращается к данным для кода PHP?

Любая помощь будет очень признательна!

Спасибо!

Update:

После изменения запроса SQL для:

categories.cat_id = " . mysql_real_escape_string($_GET['id']); 

Это решило исходную задачу, только чтобы сделать еще одну проблему пробудились.

Я сейчас получаю код ошибки:

echo 'Category could not be displayed! Please try again later' . mysql_error(); 

С SQL выводя:

You have an error in your SQL syntax; check the manual that corresponds to 
your MySQL server version for the right syntax to use near '' at line 8 

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

+0

Вы можете echo mysql_error(); после mysql_query() – 2013-03-25 05:17:25

+0

после выполнения этого, что вы получите эхом? –

+0

какая ошибка или выход вы получаете?? – alwaysLearn

ответ

1

Чтобы узнать, какую ошибку вы возвращаете, но в среднем в соответствии с вашей таблицей def, cat_id является int.

Но вы передаете его в окружении одинарных кавычек, то есть если это строка, вы не получите ошибку в PHP, вы получите ее из mySQL.

Хорошая практика, чтобы изменить это

categories.cat_id = '" . mysql_real_escape_string($_GET['id']) . "'";

в

categories.cat_id = " . intval(mysql_real_escape_string($_GET['id']));

и вы будете меньше шансов иметь ошибки СУБД, если $_GET['id'] возвращает строку, или если СУБД установлен на strict_mode

В идеале вы могли бы test ваши значения взяты из $_GET и обработайте неправильные типы изящно, прежде чем передавать их, таким образом избегая PHP или mySql, генерируя ошибку.

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

  • Нет связанных вопросов^_^