2013-03-08 4 views
0

Я пытаюсь связать MySQL SELECT с переменной PHP, но получил ошибку. Мой PHP заявление, которое дает ошибку является:concatenate mysql select query с переменной php?

$result=mysql_query("SELECT user_id,username,add FROM users WHERE username =".$user."AND password=".$add); 

и ошибки как:

(!) Notice: Undefined variable: info in C:\wamp\www\pollBook\poll\login.php on line 18 
Call Stack 

Я не понимаю, где я пропустил код. Когда я пишу запрос без WHERE, он работает нормально.

+0

Нет ваша ошибка о недостающей переменной $ Информация по линии 18, а не ваш запрос. Также НЕ используйте mysql_ * AND DO, чтобы избежать вашего запроса, у вас даже нет котировок вокруг ввода. – jtheman

+0

Кажется, эта ошибка не связана с этой строкой. –

+0

'mysql_query' - устаревшая функция. Вы должны посмотреть на MySQLi или PDO_MySQL. См. Http://php.net/manual/en/function.mysql-query.php – harryg

ответ

6

Причина, почему ваш код не работает

Вы пытаетесь использовать переменную, $info, который не был определен. Когда вы пытаетесь использовать неопределенную переменную, вы фактически ничего не связываете с какой-либо строкой, однако, поскольку PHP свободно набирается, он объявляет переменную вторым, ссылающимся на нее. Вот почему вы видите notice, а не fatal error. Вы должны пройти через свой код и убедиться, что $info получает назначенное ему значение и что он не перезаписывается в какой-то момент другой функцией. Однако, что более важно, читайте ниже.


Стоп, что вы делаете


Это уязвима к типу атаки называется SQL Injection. Я не собираюсь рассказывать вам, как объединить строки SQL. Это ужасная практика.

Вы должны NOT использовать функции mysql в PHP. Они устарели. Вместо этого используйте PHP PDO Object с подготовленными операторами. Вот довольно хороший tutorial.

Пример


После прочтения this tutorial, вы будете в состоянии сделать PDO объекта, поэтому я оставлю это немного для вас.

Следующим этапом является добавление запрос, используя prepare метод:

$PDO->prepare("SELECT * FROM tbl WHERE `id` = :id"); 
// Loads up the SQL statement. Notice the :id bit. 
$actualID = "this is an ID"; 
$PDO->bindParam(':id', $actualID); 
// Bind the value to the parameter in the SQL String. 
$PDO->execute(); 
// This will run the SQL Query for you. 
+0

Не могу договориться больше. Однако это вовсе не ответ на вопрос. – jtheman

+1

Зачем давать ОП ответ, который поощряет плохую практику. OP в конечном счете хочет запросить БД. Пусть также заставит их сделать это правильно. – christopher

+0

Ну, проблема в том, что опубликованная OP, по-видимому, не связана с линией запроса. Я согласен, что вы можете настоятельно рекомендовать его изменить свой код, но это еще не ответ на его вопрос. Поэтому добавьте это как комментарий. – jtheman

0

хотя нет $ информация переменной, используемой в запросе, но вам нужно исправить запрос:

$result=mysql_query("SELECT user_id,username,add FROM users WHERE username ='" . $user . "' AND password='" . $add . "'"); 
+0

На самом деле мы понятия не имеем, как выглядят содержимое '$ user' и' $ add'! Это не ответ на вопрос OP! – jtheman

+0

Это на самом деле не плохой ответ, несмотря на плохую практику php/mysql. OP в основном не окружал переменные '$ user' и' $ add' кавычками, поэтому они не передавались в виде строки в запросе, что приводило к ошибке. – harryg

+0

@harryg Ну, это плохой ответ, если вы хотите решить эту ошибку: 'Undefined variable: info' – jtheman

0

Первый из ошибок его выглядит как один из ваших переменных не определены. .. Проверь это. Второе окружение ваших параметров с помощью «для более безопасного синтаксиса».

+0

Вы не можете сказать по коду, отправленному, если ОП скрывает свой запрос или нет, что бы вы ни думали. – jtheman

-2

Это происходит потому, что переменные, которые вы используете, возможно, не указанные выше

Итак, сначала инициализировать переменные или если его откуда-то еще (POST или GET), а затем проверить с IsSet метод

Так полный код будет

$user = 123; // or $user = isset($user)?$user:123; 
$add = 123456; // or $add = isset($add)?$add:123456; 

А затем запустить ваш запрос

$result=mysql_query("SELECT user_id,username,add FROM users WHERE username =".$user."AND password=".$add); 
+0

Ошибка: 'Undefined variable: info' и не имеет ничего общего с этой строкой. – jtheman

1

Используйте запрос как

$result=mysql_query("SELECT user_id,username,add FROM users WHERE username ='".$user."' AND password='".$add."'"); 
0

У вас не хватает места до «и», и вы должны использовать одиночные кавычки, как предложено в других ответах.

$result=mysql_query("SELECT user_id,username,add FROM users WHERE *username =".$user."AND* password=".$add); 

Обновлено:

echo $sql = "SELECT user_id,username,add FROM users WHERE username ='".$user."' AND password='".$add."'"; 
$result=mysql_query($sql); 
+0

это не работает – Snehal

+0

проверить обновленный ответ .. Я просто повторил часть sql .. посмотрю, что вы получаете на экране (при необходимости добавьте die after echo) – kwelsan

+0

Эй, спасибо за вашу помощь, это работает .. :) – Snehal