2009-10-22 57 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