2014-03-12 2 views
0

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

Так что, если кто-то напечатает имя пользователя человека я должен преобразовать его в человеке ID:

$res_name = $_POST["res_name"]; 
    $res_id = userToId($res_name); 

Эта функция выглядит следующим образом:

function userToId($username) { 
    $data = array(); 
    $func_get_args = func_get_args(); 

    if($func_num_args = 1) 
    { 
    $res = mysql_query("SELECT id FROM `z_network_users` WHERE `username` = `$username`") or die(mysql_error()); 
    $data = mysql_fetch_assoc($res); 
    } 
    return $data['id']; 
} 

он не работает, на самом деле он не может найти имя пользователя, даже если это существующий ..

ошибка, например:

Неизвестный столбец «testperson» в «где предложение»

пользователь существует, надеюсь, что вы можете помочь мне :) пса: Я знаю, что я не должен использовать mysql_ *, но я убежище»узнал лучшая версия ..;)

ответ

0

При использовании кавычки вокруг вашего переменная, то она будет рассматриваться как столбец

Вот почему вы получили эту ошибку Unknown column 'testperson' in 'where clause'

лет и должны использовать эту функцию (вы должны бежать переменную, чтобы предотвратить SQL инъекции)

$username = mysql_real_escape_string($username); 
$res = mysql_query("SELECT id FROM `z_network_users` 
     WHERE `username` = '$username' ") or die(mysql_error()); 

или это

$username = mysql_real_escape_string($username); 
$res = mysql_query("SELECT id FROM `z_network_users` 
     WHERE `username` = '".$username."' ") or die(mysql_error()); 

попробовать эту функцию:

function userToId($username) { 

    $func_get_args = func_get_args(); 
    $username = mysql_real_escape_string($username); 
    if($func_num_args == 1) 
{ 
    $res = mysql_query("SELECT id FROM `z_network_users` WHERE `username` = '$username' ") or die(mysql_error()); 
    $row = mysql_fetch_assoc($res); 

} 
    return $row['id']; 
} 
+0

большое спасибо :) – fredkid

+0

вы приветствуете :), ваша функция теперь должна работа как есть –

+1

он! вот почему я люблю переполнение стека :) – fredkid

1

Вы не должны использовать around your значение `Я думаю.

+0

Да, действительно. И вы должны избегать значений. SQL-инъекции и т. Д. – Rudie

+0

Да, вы не должны использовать. –

+0

Этот ответ не имеет смысла, как есть. Здесь обратная сторона - это особый символ разметки. – deceze

0
"SELECT id FROM `z_network_users` WHERE `username` = '$username'" 

это исправит ваш запрос. Но функции mysql_ * устарели, поэтому вам следует избегать их использования. Вместо этого попробуйте mysqli или PDO.

+0

спасибо! я знаю :) я буду использовать DPO вместо – fredkid

0

Вы не должны backticking записи

$res = mysql_query("SELECT id FROM `z_network_users` WHERE `username` = '$username'") or die(mysql_error()); 
+0

спасибо :) получил – fredkid

0

вы не любой столбца, но

WHERE `username` = `$username`" 

но $username понимания как столбец так удалить `` от $ имени пользователя и поставить одинарную кавычку к ней, как «$ имя пользователя»

+0

получил это спасибо :) – fredkid

+0

, то, пожалуйста, примите ваш ответ от любого, что вам нравится –

0

Я думаю, что ваш запрос возвращал более 1 вам нужно использовать mysql_num_rows(), чтобы получить одну запись. Вот почему это не работает.

+0

нет есть только одно значение, но я получил его :) спасибо за ваш ответ! – fredkid

+0

как вы это исправите? –

+1

'$ username = mysql_real_escape_string ($ username); $ res = mysql_query ("SELECT id FROM' z_network_users' WHERE 'username' = '". $ Username. "'") Или die (mysql_error()); это сработало :) благодаря @echo_me – fredkid

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