我的网站有问题,我正在尝试从包含课程名称的表中获取一些数据。我搜索那门课程的名字。一些名字包含'&'在其中,例如“Formal Languages& Automata”,我需要获取与该课程相关的所有记录。
当我尝试下面的SQL语句时,它无法获得我想要的东西:
SELECT * FROM tablename WHERE course = 'Formal Languages & Automata'
查询仅搜索“正式语言”并忽略&以及之后的任何事情。
有没有人有解决方案?
由于
答案 0 :(得分:0)
您应该转义字符串中的&符号(&
):
SELECT * FROM tablename WHERE course = 'Formal Languages \& Automata'
答案 1 :(得分:0)
您可以使用 LIKE
SELECT * FROM tablename WHERE course LIKE 'Formal Languages%'
本声明将找到以“形式语言”开头的每个课程,最终可以包含任何字符。
http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like
有关字符串比较的更多信息,请参见上面的链接。在放置一些数据进行查询之前,您应该将其转义或使用预先已经转义的引擎的预处理语句和绑定参数。例如mysqli,pdo。
示例 PDO
$sth = $dbh->prepare('SELECT * FROM tablename WHERE course = :search');
$sth->bindParam(':search', 'Formal Languages & Automata', PDO::PARAM_STR);
$sth->execute();
有关PDO here
的更多信息答案 2 :(得分:0)
我的猜测是,如果你在GET查询字符串或没有URL-encoding的POST请求体中传递你正在搜索的值,就会发生这种情况,因此当PHP收到请求时, &
之后的部分被视为请求中的下一个变量。如果您从PHP发出请求,则需要使用urlencode(),如果它是在Javascript中,那么它是encodeURIComponent函数。