将LIKE用于参数

时间:2016-07-16 17:27:23

标签: php pdo syntax-error sql-like

我正在使用PDO和PHP向我的SQL服务器提交查询。我需要使用LIKE子句检查用户名以确保它是允许的(例如;它不包含任何禁止的单词),所以我使用这个SQL查询......

SELECT * FROM `table` WHERE (`name` LIKE %?%);

然后我就像这样插入带有PDO的参数...

$statement->bindParam(1, $username)

当我尝试运行时,我收到此错误...

  

致命错误:未捕获的异常' PDOException' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MariaDB服务器版本对应的手册,以获得在'%' dibdibs'%)附近使用的正确语法'在第1行'在C:\ xampp \ htdocs \ scripts \ sql.php:57堆栈跟踪:#0 C:\ xampp \ htdocs \ scripts \ sql.php(57):PDOStatement-> execute()#1 C:\ xampp \ htdocs \ api \ users.php(30):dibdibs \ pdo->查询(' SELECT * FROM` ...',数组)#2 {main}抛出C:\ xampp \ htdocs第5行的\ scripts \ sql.php

当我使用=而不是LIKE时,PDO代码适用于其他查询,但是在我尝试使用LIKE子句时抛出上述错误。< / p>

如果您需要检查,我已将我的完整代码放在Pastebin上。 我正在使用GET来获取数据,因为我在AJAX中使用它(这也工作正常),但我尝试的用户名是&#39; dibdibs&#39;,在其他查询中工作正常

1 个答案:

答案 0 :(得分:1)

使用此

你可以使用这两个中的任何一个

$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('%value%'));

while ($results = $query->fetch())
{
   echo $results['column'];
}

 // without loop 

$query = "SELECT * FROM tbl WHERE address LIKE ?";
$params = array("%$var1%");
$stmt = $handle->prepare($query);
$stmt->execute($params);