我正在使用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;,在其他查询中工作正常
答案 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);