【问题标题】:Where clause variable in query being ignored查询中的 Where 子句变量被忽略
【发布时间】:2011-12-16 18:12:13
【问题描述】:

这里是新手。当我在 WHERE 子句中输入日期('YYYY-MM-DD')时,效果很好。当我用从上一页传递的变量替换它时,WHERE 子句被忽略。是不是因为变量还没有创建?

<?php $name = $_POST["start"]; ?>

$query = "SELECT employees.first, employees.last, employees.street, employees.city,  
employees.a, employees.b,  
GROUP_CONCAT(empchecks.checknum ORDER BY empchecks.checkdate SEPARATOR '<br /> ') as  
checknum, 
GROUP_CONCAT(empchecks.checkdate ORDER BY empchecks.checkdate      
SEPARATOR '<br /> ')  
as checkdate 
FROM employees 
INNER JOIN empchecks ON employees.enum = empchecks.enum 
WHERE empchecks.checkdate >= '$start' GROUP BY empchecks.enum";  

【问题讨论】:

  • 警告您的代码容易受到 sql 注入攻击!
  • 你能验证$start的值吗?也就是说,如果你回显 $query,它会说什么?以及丹尼尔所说的,也是。 :) 而且它不太可能被忽视;相反,检查日期比较可能评估为真($start 是一个空字符串或任何被强制成为纪元开始的东西,等等)。
  • 鉴于您的代码,$start 尚未定义。更重要的是,根据您清理输入变量的方式,变量插值技术可能会使您容易受到 SQL 注入攻击。
  • 它是空的。但是,如果我在查询之外回显 $start,它会告诉我我在上一页输入的日期。

标签: php mysql variables where


【解决方案1】:

变量 $start 不存在。尝试用 $name 替换它,看看它是否有效。您还应该使用 sprintf http://php.net/manual/en/function.sprintf.php 来为查询传递变量。

【讨论】:

  • 与 $name 在 sql 中的结果相同。当我回显 $query 时,$start/$name 为空。
【解决方案2】:

看起来您将$_POST['start'] 分配给$name,而不是您稍后提到的$start

【讨论】:

    【解决方案3】:

    您的 POST 是“开始”,但您将其分配给“名称”

    所以在你的 SQL 中使用 $name...

    【讨论】:

    • 13 分钟前?而你们所有人都有 10、11 或 12 分钟?我是第一个;)
    【解决方案4】:

    写这个 提取($_POST) 为了能够使用 $start 而不是 $name

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2015-01-31
      • 2015-08-15
      • 2012-12-29
      • 2013-09-04
      • 2021-01-07
      • 1970-01-01
      相关资源
      最近更新 更多