【问题标题】:Grouping multiple like statements将多个类似的语句分组
【发布时间】:2014-05-29 16:12:53
【问题描述】:

我是 SQL 新手,似乎无法将多个 LIKE 语句组合在一起。知道我做错了什么吗?

$query = mysqli_query($mysqli, "SELECT * FROM table_name
            WHERE Page LIKE ".$page."
            AND Profession LIKE ".$profession.", 
            AND Age LIKE ".$age."");

谢谢。

【问题讨论】:

  • $page, $profession & $age 中的值是什么。
  • 出了什么问题?你有错误还是你有错误的结果?
  • 使用单引号'.$page.' '.$专业。' '.$age.'
  • 使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs。您不必担心引用问题。
  • 当你创建这样的查询时使用 mysqli 有什么意义,没有绑定。

标签: php mysql


【解决方案1】:

这可能是因为它们没有正确封装

$query = mysqli_query($mysqli, "SELECT * FROM table_name
            WHERE Page LIKE ".$page."
            AND Profession LIKE ".$profession."
            AND Age LIKE ".$age."");

编译的时候是这样的

SELECT * FROM table_name
            WHERE Page LIKE page number 1
            AND Profession LIKE my profession
            AND Age LIKE 100

这是无效的 SQL

您需要使用引号并转义值

$query = mysqli_query($mysqli, "SELECT * FROM table_name
            WHERE Page LIKE '%".$page."%'
            AND Profession LIKE '%".$profession."%'
            AND Age LIKE '%".$age."%'");

会给

SELECT * FROM table_name
            WHERE Page LIKE '%page number 1%'
            AND Profession LIKE '%my profession%'
            AND Age LIKE '%100%'

这可能会产生您所期望的结果

通过至少使用http://www.php.net/manual/en/mysqli.real-escape-string.php 确保值是安全的,尽管查看准备好的语句会是一个更好的选择

编辑:

去掉LIKE ". $profession."后面的逗号

【讨论】:

【解决方案2】:

如果您使用占位符和bind_param,这将更容易正确:

$stmt = mysqli_query($mysqli, "SELECT * FROM table_name
            WHERE Page LIKE ?
            AND Profession LIKE ?
            AND Age=?");

mysqli_stmt_bind_param($stmt, 'ssi', "%" . $page . "%", "%" . $profession. "%", $age);

mysqli_stmt_execute($stmt);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2022-01-04
    • 2017-05-15
    • 1970-01-01
    相关资源
    最近更新 更多