【问题标题】:mysqli array -> query not attaining correct datamysqli 数组 -> 查询未获得正确的数据
【发布时间】:2009-05-30 18:26:14
【问题描述】:

我的mysqli_fetch_array(mysqi_query($db, $query)) 似乎没有从数据库中获取正确的信息,因此 PHP 应用程序无法正常工作。

这里是查询,

<?php
if($_GET){
$current = mysqli_fetch_array(mysqli_query($db, "SELECT * from `tbl_user` WHERE `userid` = '".$_GET['userid']."'"));
$currentperms  = mysqli_fetch_array(mysqli_query($db, "SELECT * from `tbl_perms` WHERE `userid` = '".$_GET['userid']."'"));
} 
?>

同时,if ($current['userid'] == "1") {echo(" selected ");} 根本没有输出任何内容,因此在 SELECT 标记中没有选择正确的选项。

所以,在哪里:我希望: 回声($currentperms['newapp']); 不等于1,因为在数据库中是这样设置的,结果是“1”。我通过回显获得的字符串对此进行了测试。 Newapp 也不是表中的一列,因此它不应该返回“1”。

有了这个:

 if $current['userid'] == "1") {
 echo(" selected ");
 }

没有回显,但是,该变量已在脚本中使用过,其输出为“1”。

请帮帮我,我要穿过屋顶了:|

@sasa:输出: Success!Array ( [0] => 1 [userid] => 1 [1] => shamil.nunhuck [username] => shamil.nunhuck [2] => Shamil Nunhuck [userfullname] => Shamil Nunhuck [3] = > shamil.nunhuck@localhost [用户邮箱] => shamil.nunhuck@localhost [4] => 6363d731bd7492fe4c33fc3d90fd61bc [用户密码] => 6363d731bd7492fe4c33fc3d90fd61bc [5] => 1 [用户级别] => 1 [6] => 管理员 [用户名] > 管理员 [7] => 1 [tos] => 1 ) 数组 ( [0] => 1 [userid] => 1 [1] => 0 [ptodo] => 0 [2] => 0 [usercp] => 0 [3] => 0 [pm] => 0 [4] => 0 [bug] => 0 [5] => 0 [abug] => 0 [6] => 0 [admincp] => 0 [7] => 0 [intmgs] => 0 [8] => 0 [adduser] => 0 [9] => 0 [pass] => 0 [10] => 0 [useredit] => 0 [ 11] => 0 [列表用户] => 0 [12] => 0 [新应用] => 0)

【问题讨论】:

  • 整个脚本没有出来:Z
  • 请使用正确的代码缩进,并使用 Stack Overflow 的代码模式。您的代码现在不可读。
  • 我试过了,但是由于代码使用了很多html,正在被解析。
  • 如果您将其标记为代码,则不会。 ;)

标签: php mysqli echo


【解决方案1】:

如果问题是数据库返回的信息不正确,最好只发布代码的 mysql 部分(尤其是查询)、当前结果以及您希望看到的结果。

也仅供参考,我希望您在将 $_GET 和 $_POST 变量转储到该查询之前对其进行解析。像这样将它们直接传递到 SQL 中并不是一个好主意。

【讨论】:

  • 更新了帖子。我目前不转储 post 和 vars,但是,目前正在整个 PHP 应用程序中进行修改。
【解决方案2】:

我不能 100% 确定我是否遵循了这个问题,但您似乎是在说 $current['userid'] == "1" 的结果是错误的,尽管 $current['userid'] 打印为“1”,对吗?

如果是这种情况,则可能有一些空格或其他垃圾进入导致比较失败的值,尽管我怀疑userid 是否由数据库自动生成。

您可以通过更彻底地检查该值来验证这一点,例如

var_dump( $current['userid'] ); // Check for whitespace
echo strlen( $current['userid'] ); // Is this greater than 1?

【讨论】:

  • 结果:string(1) "1" Echo - 1 匹配成功!
【解决方案3】:

试试这个代码:

//  I put some echo for testing
if(!empty($_GET['id'])) {
    $id = (int)$_GET['id'];
    $sql = mysqli_query($db, "SELECT * from tbl_user WHERE userid = $id LIMIT 1");
    if(mysqli_affected_rows($db) == 0) {
        echo "There is no user with that id";
    } else {
        $current = mysql_fetch_assoc($sql);
        $currentperms  = mysql_fetch_assoc(mysqli_query($db, "SELECT * from tbl_perms WHERE userid = $id"));
        echo "Success!";
        // Or try to print result
        print_r($current);
        print_r($currentperms);
    }
} else {
    echo "There is no user id";
}

或者可能只是语法错误:

有了这个:

 if $current['userid'] == "1") {
 echo(" selected ");
 }

应该是:

if($current['userid'] == 1) {
    echo(" selected ");
}

【讨论】:

  • 警告:mysqli_affected_rows() 期望参数 1 是 mysqli,在第 11 行的 /home/radonsys/public_html/control/useredit.php 中给出的对象不。第 11 行是: if(mysqli_affected_rows($sql) == 0) {
  • 不,这在此处的代码中存在 - 一定是在复制和粘贴时意外删除了它。
  • 尝试使用 mysql_fetch_assoc 代替 mysql_fetch_array,或者尝试 $current['userid'] == 1 不带引号...
  • 嗯,回显的内容是正确的,但是复选框和语句:$currentperms['newapp'],仍然显示 1 :|
  • 你有没有想过这个?
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多