2013-05-09 83 views
1

我有這個在php中進行的SQL查詢。但查詢在ERROR中解除。如果刪除此AND first_name LIKE '{$first_name}%',它工作正常,併產生正確的輸出。我無法關注下面的語法有什麼問題。 任何幫助將不勝感激。由於爲什麼SQL/PHP中的這個查詢不起作用?

$db = new PDO("mysql:dbname=newbie"); 
      $first_name=$_GET["firstname"]; 
      $first_name =$db->quote($first_name); 
      $last_name=$_GET["lastname"]; 
      $last_name=$db->quote($last_name); 
      $rows=$db->query("SELECT id,first_name FROM actors WHERE last_name=$last_name AND first_name LIKE '{$first_name}%' ORDER BY film_count DESC LIMIT 1"); 
+0

請編輯您的第一段。現在不清楚。 – 2013-05-09 20:13:24

+1

在Google上搜索SQL注入。這將有助於推動你的事業向前發展。 – RichardTheKiwi 2013-05-09 20:14:54

+0

你不需要一個用戶來連接你的計劃? $ db = new PDO('mysql:host = xxx; port = xxx; dbname = newbie','user','password'); – Terence 2013-05-09 20:26:55

回答

1

我認爲這可能是因爲你錯過了$lastname引號,因爲它是一個文本字段。

$db = new PDO("mysql:dbname=newbie"); 
      $first_name=$_GET["firstname"]; 
      $first_name =$db->quote($first_name); 
      $last_name=$_GET["lastname"]; 
      $last_name=$db->quote($last_name); 
      $rows=$db->query("SELECT id,first_name FROM actors WHERE last_name='{$last_name}' AND first_name LIKE '{$first_name}%' ORDER BY film_count DESC LIMIT 1"); 
+0

你完全錯過了這個有巨大SQL注入漏洞的部分。這不是引用問題。 – tadman 2013-05-09 20:18:23

+0

如果last_name什麼都沒有,那該怎麼辦 – Notepad 2013-05-09 20:19:47

+0

好點,但我認爲它應該是一個精確的搜索,因爲他在第二個標準中使用了'LIKE'。 – luttkens 2013-05-09 20:28:07

0

你沒有正確使用PDO,並暴露自己的大量SQL injection bugs風險。使用佔位符和逃避你的數據:

$sth = $db->prepare("SELECT id,first_name FROM actors WHERE last_name=:lastname AND first_name LIKE :first_name ORDER BY film_count DESC LIMIT 1"); 
$result = $db->execute(array("firstname" => "%" . $_GET["firstname"] . "%", "lastname" => $_GET["lastname"])); 

有許多方法可以做到這一點,所有的various tutorials描述。

+1

我知道有這個注入漏洞,但我試圖在解決這些漏洞之前讓查詢工作。正如我所提到的,查詢在我刪除AND first_name LIKE'{$ first_name}%'時起作用。所以它必須用語法來做些事情。 – 2013-05-09 20:33:08

+0

如果您修復了這些錯誤,您就不會有太多問題。在查詢字符串中缺少引號是提示你做錯了。讓它與注入漏洞「共同工作」是創建巨大安全漏洞的好方法,因爲你可能會忘記這一點,並在以後不能修復它。對逃跑有一種隨意的態度,就像醫生對手術前洗手一樣隨便。第一次寫得正確,你不必回頭修復它。這實際上是一行代碼。你爲什麼抗議? – tadman 2013-05-09 20:42:02

+0

@tadman - 漏洞不是一個錯誤,雖然它可能比bug更危險。憑藉所有善意,你在這裏脫離主題。 – 2013-05-09 20:44:01

0

您可以移除'$ first_name'周圍的'{'和'}'。當變量位於雙引號內時,它們不應該是必需的。