1

我的网站有问题,我正在尝试从包含课程名称的表中获取一些数据。我按该课程的名称搜索。一些名称中包含“&”,例如“形式语言和自动机”,我需要获取与本课程相关的所有记录。

当我尝试下面的 SQL 语句时,它无法得到我想要的:

   SELECT * FROM tablename WHERE course = 'Formal Languages & Automata'

该查询仅搜索“Formal Languages”并忽略 & 和其后的任何内容。

有人对此有解决方案吗?

谢谢

4

3 回答 3

0

您应该转义&字符串中的和号 ( ) 字符:

SELECT * FROM tablename WHERE course = 'Formal Languages \& Automata'
于 2013-06-03T11:31:55.587 回答
0

你可以使用喜欢

 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的信息在这里

于 2013-06-03T11:38:25.257 回答
0

我的猜测是,如果您在 GET 查询字符串或 POST 请求正文中传递您正在搜索的值而没有对其进行URL 编码,则可能发生这种情况,因此当 PHP 收到请求时,后面的部分&被认为是请求中的下一个变量。如果您从 PHP 发出请求,则需要使用urlencode(),如果它在 Javascript 中,则它是encodeURIComponent函数。

于 2013-06-03T12:12:35.743 回答