【问题标题】:Proper PHP/MySQL syntax help needed需要正确的 PHP/MySQL 语法帮助
【发布时间】:2012-06-06 04:14:15
【问题描述】:

我整天都在寻找我的代码中的一个错误。这是它的长短:

我有一个通过查询字符串传递的变量,我想在我的 MySQLi 查询中使用该变量。像这样:

$variable;

$info = dbConnect('query');
$eInfo = "SELECT *
FROM tablename
WHERE fieldname = '$variable%'";
$eiData = $info->query($eInfo) or die(mysqli_error());
$eInfo = $eiData->fetch_assoc();

重点是变量名后面的%。我不是 PHP 专家,但我记得不久前就学会了这个技巧,它对我所有的数据库驱动网站都有效,除了我正在开发的新网站。

上面的查询没有从表中返回任何数据。

但是……

如果我省略 % 如下:

$variable;

$info = dbConnect('query');
$eInfo = "SELECT *
FROM tablename
WHERE fieldname = '$variable'";
$eiData = $info->query($eInfo) or die(mysqli_error());
$eInfo = $eiData->fetch_assoc();

查询执行,我得到了我的数据。

为什么在我想使用语法“$variable%”编写查询后,这将不再起作用?只需删除 % ('$variable') 就可以正常工作,这让我完全困惑。

对于它的价值,我运行了一个专用服务器并且最近安装了 suPHP,如果这有任何帮助在这里有意义的远程机会(PHP 5.2.17 是我当前的版本)。

同样,我不是 PHP 专家,但在检查了旧网站的代码后,我使用 MySQLi 查询完成了,在将变量附加到查询中时,% 始终存在。

我完全死在水里了。您能提供的任何帮助都会非常感激,以至于无法解释。

【问题讨论】:

  • 您是否正在考虑条件为field LIKE 'value%' 而不是field = 'value%' 的文本字段? % 是带有 LIKE 的通配符,但它是带有 = 的字面值。
  • 另外,如果你像这样直接在查询中抛出该变量,你很容易受到 SQL 注入的攻击。 Bind parameters 改为使用参数化查询。 (参见链接中的示例。)
  • @Wiseguy - 你如何在不直接传递变量的情况下进行数据库查询?
  • 奇数。简单地在一切结束时抛出% 对我来说没有意义。我只是猜测他们都使用LIKE 而不是=,因为否则我根本看不到它会如何工作。长话短说,据我所知,% 不应该在那里。如果$variable 是“wiseguy”,则查询不应该找到结果,除非存储的值是字面上的“wiseguy%”,最后是“%”,我怀疑是这种情况。
  • 好的,那么根据我的理解,我不知道为什么所有其他查询都有效。 :-p

标签: php mysql database syntax mysqli


【解决方案1】:

如果您想将变量放在难以解释变量名结束位置的字符串中,请像这样使用{$var}

$eInfo = "SELECT * FROM tablename WHERE fieldname LIKE '{$variable}%'"; 

【讨论】:

    【解决方案2】:

    %LIKE 查询的通配符。因此,如果您在带有WHERE var = 'cow%' 的查询中使用%,它将在数据库中搜索文字字符串cow%

    1. cow
    2. cows
    3. cow%(匹配)
    4. the cow

    在 Like 查询中:WHERE var LIKE 'cow%' 将匹配以下内容:

    1. cow(匹配)
    2. cows(匹配)
    3. cow%(匹配)
    4. the cow

    MySQL Pattern Matching

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多