【问题标题】:issue with mysql query, bad coding?mysql查询问题,编码错误?
【发布时间】:2011-12-28 23:21:18
【问题描述】:

我正在尝试执行以下 PHP / MySQL 查询,它对前两组工作正常,但对于其他所有人,我得到一个 MySQL 错误,这写正确吗?

$user =& JFactory::getUser();
$N = $user->get('name'); 
$username = $user->get('username');
$groups = $user->get('groups');

foreach($groups as $groupName=>$groupId)
{
}

$G=$groupName;

if ($G=="Management Staff")
    $result = mysql_query("SELECT * FROM hqfjt_chronoforms_data_addupdatelead");
elseif ($G=="Website Developers")
    $result = mysql_query("SELECT * FROM hqfjt_chronoforms_data_addupdatelead");
else
    $result = mysql_query("SELECT * FROM hqfjt_chronoforms_data_addupdatelead WHERE createdby=$N");

当我以其他人身份登录时:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\server2go\server2go\htdocs\chandlers\components\com_jumi\views\application\view.html.php(38) : eval()'d code on line 87

Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in C:\server2go\server2go\htdocs\chandlers\components\com_jumi\views\application\view.html.php(38) : eval()'d code on line 132

【问题讨论】:

  • 错误引用的mysql_fetch_object 调用在哪里?我在上面的代码 sn-p 中没有看到对 mysql_fetch_object 的调用。它是在$result 的这个块之后出现的吗?如果是这样的话,$result 似乎没有被设置。
  • 在 SQL 查询中直接使用 PHP 变量绝对不是一个好习惯,它会让您面临 SQL 注入的可能性。此外,mysql_* 函数已经失宠,mysqli 或 PDO 是目前与数据库交互的首选方法
  • 嗨,我只是一个初学者,所以不确定其他方式,除了在 sql 中手动声明他们的用户名之外,我怎么能声明只加载来自特定用户的记录?。

标签: php mysql select where-clause


【解决方案1】:
$result = mysql_query("SELECT * FROM hqfjt_chronoforms_data_addupdatelead WHERE createdby=$N");

是鱼腥味,应该是

$result = mysql_query("SELECT * FROM hqfjt_chronoforms_data_addupdatelead WHERE createdby='$N'");

确保 $N 没有任何恶意。

【讨论】:

  • 谢谢,现在正在工作,只显示该用户创建的结果,谢谢:-),我会在允许的时候接受你的回答。
【解决方案2】:

不确定这是否只是您将其复制/粘贴到 stackoverflow 中的一项糟糕的工作,但看起来您的花括号完全不正确。认为你会想要更多这样的东西:

$username = $user->get('username');
$groups = $user->get('groups');
foreach($groups as $groupName=>$groupId) {
  $G=$groupName;
  if ($G=="Management Staff")
    $result = mysql_query("SELECT * FROM hqfjt_chronoforms_data_addupdatelead");
  elseif ($G=="Website Developers")
    $result = mysql_query("SELECT * FROM hqfjt_chronoforms_data_addupdatelead");
  else
    $result = mysql_query("SELECT * FROM hqfjt_chronoforms_data_addupdatelead WHERE     createdby=$N");
}

这样你的 foreach 循环就会真正执行它下面的代码。您粘贴到问题中的代码有一个 for each 循环,它在循环中不执行任何操作,因为它是这样编写的:

foreach($groups as $groupName=>$groupId) {}

然后您继续尝试在循环外使用 foreach 循环中的变量之一:

$G=$groupName;
if ($G=="Management Staff")
...

这不起作用,因为$groupName 变量只会设置在foreach 循环的范围内。

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2012-12-24
    • 2012-02-17
    • 2015-08-28
    • 2011-11-14
    相关资源
    最近更新 更多