2013-11-21 4 views
-2

Я просмотрел все и не смог найти решение моей проблемы, так что я здесь. Я пытаюсь получить имя пользователя из формы. Из этого имени я пытаюсь получить идентификатор пользователя для публикации в другой таблице. Когда я это делаю, я получаю значение «0» в таблице.PHP/MYSQL Получить user_id из базы данных, используя имя

Это код:

$to_name = trim($_POST['to_name']); 

$get_to_id = "SELECT user_id FROM users WHERE name = " . $to_name; 
$gti = mysql_query($get_to_id); 
if($gti) { 
$abc = mysql_fetch_array($gti); 
$to_id = $abc['user_id']; 
} 

И когда я вставить его в таблицу не показывать пользователям идентификатор. Любая помощь будет большой. Заранее спасибо.

+3

прежде всего ... '$ to_name' должно быть в кавычках –

+2

во-вторых .... санировать ваши входы. –

+0

Вы должны проверить наличие ошибок для всех операций MySQL. –

ответ

1
$get_to_id = sprintf("SELECT user_id FROM users WHERE name = '%s' ",$to_name); 
+0

Спасибо, что сделал трюк – nikito2003

+0

ха-ха конечно. когда вы получаете достаточно голосов, голосуйте за мой ответ! – Nate

+0

Это не делает ничего, чтобы защитить от SQL-инъекции. Это не отличается от просто конкатенации строки напрямую. Считая, что это на самом деле WORSE, чем просто конкатенация строки, потому что у вас есть ложное чувство безопасности, используя бесполезный вызов функции. Опять же, это не безопасно и не является хорошей практикой. –

0

Вы не должны использовать `mysql_query`

Всех mysql_* функции устарели - это значит, что он не будет в ближайшее время будет включен в языке, и ваш код будет нарушен. Любые предоставленные вам рекомендации, которые включают использование функции mysql_query, являются плохим советом и должны быть проигнорированы как таковые.

Смотрите документацию, и обратите внимание на большое красное предупреждение: http://php.net/manual/en/function.mysql-query.php

Использовать PDO вместо этого. Его очень легко настроить, и вам не нужно ничего менять вообще.

// note: untested code follows 
$pdo = new PDO('mysql:host='.$host.';dbname='.$db_name, $db_username, $db_password); 
$statement = $pdo->prepare(' 
    SELECT 
     user_id 
    FROM 
     `users` 
    WHERE 
     `name` = :name 
'); 

$result = $statement->execute(array(
    'name'=>trim($_POST['to_name']) 
)); 
$to_id = $result ? $statement->fetchColumn() : false; 

// now, check for failure before moving on! 
if (!$result || !$to_id){ 
    // tip: do something nicer than die to handle this failure. 
    die('Error occurred'.implode(":",$pdo->errorInfo())); 
} 

// everything is ok, code continues.... 

Документация

+0

Хорошо, поэтому я просматривал сайты, и я читал, что PDO - это просто подключение к базе данных, это правильно? Могу ли я продолжать выполнение инструкции if или while позже на моей php-странице? – nikito2003

+0

@ nikito2003 PDO - одна из возможных замен для функций 'mysql_ *', возможно, лучшая. Это просто метод доступа к базе данных, который вы должны использовать, он не изменяет никакой другой логики или практики кода. Код в вашем вопросе уязвим для «sql injection» (исследование, которое!), PDO помогает устранить этот риск при правильном использовании. В противном случае, да, вы всегда делаете все то же самое в своем коде. –

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