【问题标题】:search those records which have column value with & in it搜索那些列值带有 & 的记录
【发布时间】:2013-06-03 11:27:40
【问题描述】:

我的网站出现问题,我正在尝试从包含课程名称的表中获取一些数据。我按该课程的名称搜索。有些名称中包含“&”,例如“Formal Languages & Automata”,我需要获取与本课程相关的所有记录。

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

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

查询只搜索“Formal Languages”,忽略 & 和后面的任何内容。

有没有人可以解决这个问题?

谢谢

【问题讨论】:

  • 你能发布你的查询是如何构造的以及你是如何输出数据的吗? &符号本身在 MySQL 中没有任何特殊含义,因此仅在字符串中存在或不存在它不会导致任何问题。

标签: php mysql select ascii


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这不是Oracle,&符号本身在MySQL字符串中没有特殊含义。
    【解决方案3】:

    你可以使用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

    【讨论】:

    • 非常感谢大家,我能够通过对 GET 中传递的变量进行 url 编码来解决它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    相关资源
    最近更新 更多