2013-03-08 70 views
0

我想連接MySQL SELECT查詢與PHP變量,但出現錯誤。 它給出了一個錯誤我的PHP語句:連接mysql選擇查詢與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_ *和DO逃避你的查詢,你甚至沒有輸入引號。 – jtheman 2013-03-08 11:44:45

+0

看來這個錯誤與這條線沒有關係。 – 2013-03-08 11:44:49

+0

'mysql_query'是不推薦使用的函數。你應該看看MySQLi或PDO_MySQL。見http://php.net/manual/en/function.mysql-query.php – harryg 2013-03-08 11:45:10

回答

6

爲什麼你的代碼不能正常工作

您正試圖使用​​一個變量,$info,尚未確定的原因。當你試圖使用一個未定義的變量時,你實際上並沒有將任何東西連接到一個字符串中,但是因爲PHP是鬆散類型的,所以它將第二個變量聲明爲引用它。這就是爲什麼你看到一個notice而不是fatal error。你應該通過你的代碼,並確保$info得到一個值賦予它,並且它不會被另一個函數的某個點覆蓋。但是,更重要的是,請閱讀下文。


停止你正在做什麼


這是容易受到攻擊類型稱爲SQL Injection。我不會告訴你如何連接SQL字符串。這是可怕的做法。

您應該不是在PHP中使用mysql函數。他們已被棄用。而是使用PHP PDO對象和準備好的語句。這是一個相當不錯的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 2013-03-08 11:46:44

+1

爲什麼給OP一個鼓勵壞習慣的答案。 OP最終想要查詢數據庫。也可以讓他們以正確的方式去做。 – christopher 2013-03-08 11:49:53

+0

那麼OP發佈的問題顯然與查詢行沒有關聯。我同意你可以強烈地鼓勵他改變他的代碼,但這仍然不是他的問題的答案。因此請添加此評論。 – jtheman 2013-03-08 11:52:27

0

雖然在查詢中使用沒有$信息變量,但你需要更正查詢:

從它看起來像你的變量之一是沒有定義的錯誤
$result=mysql_query("SELECT user_id,username,add FROM users WHERE username ='" . $user . "' AND password='" . $add . "'"); 
+0

實際上,我們不知道'$ user'和'$ add'的內容是怎麼樣的!這不是OP的問題的答案! – jtheman 2013-03-08 11:48:58

+0

這實際上並不是一個糟糕的答案,儘管可憐的PHP/MySQL的做法。 OP基本上沒有用引號包圍'$ user'和'$ add'變量,所以它們不會作爲查詢中的字符串傳遞,導致錯誤。 – harryg 2013-03-08 11:57:03

+0

@harryg如果你想解決這個錯誤,那麼這是一個不好的答案:'未定義變量:info' – jtheman 2013-03-08 11:57:53

0

第一。 .. 覈實。其次用'更安全的語法來環繞你的參數。

+0

無論你怎麼想,你都不能從發佈的代碼中發現如果OP已經逃脫了他的查詢。 – jtheman 2013-03-08 11:56:59

-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 2013-03-08 11:50:43

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 2013-03-08 12:16:51

+0

檢查更新的答案..我只是呼應sql部分..看到你在屏幕上得到(如果需要添加回聲後)死亡 – kwelsan 2013-03-08 12:26:07

+0

嘿.. thanx爲你的幫助它的工作.. :) – Snehal 2013-03-08 12:43:49