我的网站有问题,我正在尝试从包含课程名称的表中获取一些数据。我按该课程的名称搜索。一些名称中包含“&”,例如“形式语言和自动机”,我需要获取与本课程相关的所有记录。
当我尝试下面的 SQL 语句时,它无法得到我想要的:
SELECT * FROM tablename WHERE course = 'Formal Languages & Automata'
该查询仅搜索“Formal Languages”并忽略 & 和其后的任何内容。
有人对此有解决方案吗?
谢谢
您应该转义&
字符串中的和号 ( ) 字符:
SELECT * FROM tablename WHERE course = 'Formal Languages \& Automata'
你可以使用喜欢
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的信息在这里
我的猜测是,如果您在 GET 查询字符串或 POST 请求正文中传递您正在搜索的值而没有对其进行URL 编码,则可能发生这种情况,因此当 PHP 收到请求时,后面的部分&
被认为是请求中的下一个变量。如果您从 PHP 发出请求,则需要使用urlencode(),如果它在 Javascript 中,则它是encodeURIComponent函数。