2009-10-22 55 views
0

我有一個非常簡單的搜索表單,它從GET_開始,然後將其合併到SQL查詢中。我想在paramterized查詢中使用此字符串從GET,比如:帶引號和參數化SQL查詢的問題

$searchString = '%' . $searchString . '%'; 
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = $searchString" . $max; 

    if ($getRecords = $con->prepare($recordsQuery)) { 
     $getRecords->bind_param("s", $searchString); 
     $getRecords->execute(); 
     $getRecords->bind_result($username, $firstname, $lastname); 
     $rows = array(); 

     while ($getRecords->fetch()) { 
      $row = array(
       'username' => $username, 
       'firstname' => $firstname, 
       'lastname' => $lastname, 
      ); 
      $rows[] = $row; 
     } 
     return $rows; 
    } 

然而,這導致了「where子句」錯誤

未知柱「術語」。

我認爲這是因爲我的術語沒有引用,但是向變量添加轉義引號什麼也沒做。

任何語法錯誤或類似的問題都是提出問題的修改產物,並且不存在於我的實踐代碼中。


OK,我解決了這個問題,通過改變以下行:

$searchstring = "'" . $searchstring . "'"; 
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = $searchString" . $max; 

我相信這種做法可能是不好的,因爲它不是paramterized ......,但我無法得到它的工作任何其他方式。

回答

1

你忘了一些報價: $searchString = '"%' . $searchString . '%"';

但是,爲什麼你建立這樣的請求時,你可以使用綁定的參數:http://www.php.net/manual/fr/pdostatement.bindparam.php

 

$searchString = '%' . $searchString . '%'; 
$recordsQuery = "SELECT username, firstname, lastname FROM $table WHERE lastname = :lastname" . $max; 
if ($getRecords = $con->prepare($recordsQuery)) { 
     $getRecords->bind_param(":lastname", "%".$searchString."%"); 
     $getRecords->execute(); 
     $getRecords->bind_result($username, $firstname, $lastname); 
     $rows = array(); 
     while ($getRecords->fetch()) { 
      $row = array(
       'username' => $username, 
       'firstname' => $firstname, 
       'lastname' => $lastname, 
      ); 
      $rows[] = $row; 
     } 
     return $rows; 
    } 
 
+0

添加引號什麼都沒有改變。 – 2009-10-22 14:40:01

+0

準確的$ max var是什麼? – Arkh 2009-10-22 14:41:00

+0

只需要一個int,就可以查看要顯示的記錄數量。 – 2009-10-22 14:41:42