Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中对一个sql查询同时使用fetch_数组和fetch_assoc时出现问题_Php_Mysql_Sql_Fetch - Fatal编程技术网

在php中对一个sql查询同时使用fetch_数组和fetch_assoc时出现问题

在php中对一个sql查询同时使用fetch_数组和fetch_assoc时出现问题,php,mysql,sql,fetch,Php,Mysql,Sql,Fetch,我试图从订单表中获取订单数据,并使用其id号,只显示表中不为空的字段。在上面,我想用从订单表中获取的用户名显示从用户表中提取的订单的联系人详细信息 我曾考虑在查询中使用JOIN,但对于如何在表中仅显示订单表单的非空字段,以及如何将上面用户的联系人详细信息显示为一行接一行的简单文本,我感到困惑 最后我想出了下面的代码 if(isset($_POST['subsorder'])) { include('../conn.php'); $ordt="";

我试图从订单表中获取订单数据,并使用其id号,只显示表中不为空的字段。在上面,我想用从订单表中获取的用户名显示从用户表中提取的订单的联系人详细信息

我曾考虑在查询中使用JOIN,但对于如何在表中仅显示订单表单的非空字段,以及如何将上面用户的联系人详细信息显示为一行接一行的简单文本,我感到困惑

最后我想出了下面的代码

if(isset($_POST['subsorder']))
    {
        include('../conn.php');
        $ordt="";
        if($sql=$orderdb->query("SELECT * FROM orders WHERE id='$_POST[sorder]'") or die($orderdb->error))
        {
            if($sql->num_rows!=0)
            {           
                $info=$sql->fetch_assoc();
                $un=$info['username'];

                $h = "";
                $d="";
                while($row = $sql->fetch_array())
                {
                    foreach($row as $key => $value)
                    {
                        if($key != 'id' && !is_numeric($key) && $value != 0)
                        {
                            $h.= "<th>$key</th>";
                            $d.= "<td>$value</td>";
                        }
                    }
                }
            }   

            if($sql2=$usersdb->query("SELECT * FROM users WHERE username='$un'") or die($usersdb->error))
            $info2=$sql2->fetch_assoc();
            echo $info2['firstname']." ".$info2['firstname']."<br>";
            echo $info2['address1']."<br>".$info2['address2']."<br>".$info2['address2']."<br>";
            echo $info2['phone']."<br>".$info2['email']."<br>";

            echo "<table border='1' style='border-collapse:collapse'>
            <tr>$h</tr>
            <tr>$d</tr>
            </table>";
        }
    }
if(isset($\u POST['suborder']))
{
包括('../conn.php');
$ordt=“”;
如果($sql=$orderdb->query(“从订单中选择*,其中id='$\u POST[sorder]'))或die($orderdb->error))
{
如果($sql->num\u行!=0)
{           
$info=$sql->fetch_assoc();
$un=$info['username'];
$h=“”;
$d=“”;
而($row=$sql->fetch_array())
{
foreach($key=>$value的行)
{
如果($key!=“id”&&&!是数值($key)&&$value!=0)
{
$h.=“$key”;
$d.=“$value”;
}
}
}
}   
如果($sql2=$usersdb->query(“从username='$un''的用户中选择*)或die($usersdb->error))
$info2=$sql2->fetch_assoc();
echo$info2['firstname']。“$info2['firstname']。”
”; echo$info2['address1']。“
”。$info2['address2']。”
“$info2['address2']。”
”; echo$info2['phone']。“
”$info2['email']。“
”; 回声“ $h 美元 "; } }
但这造成了一个问题。这只回显从info2结果集中导出的联系人详细信息。下表不是从$row结果集派生的。但如果我从代码中删除开头的info结果集,则会显示表!但是我必须有info结果集,因为这会提取用户名,以便在下一次查询中使用


我想知道在一个查询上有两个fetch函数是否是问题所在。或者我不知道我是否做了一些疏忽,或者这种用法是否基本上是错误的。

SQL注入漏洞被发现。使用事先准备好的语句,否则bobby tables将无法使用<代码>$orderdb->query(“从订单中选择*,其中id='$\u POST[sorder]'”)Sure@EliasVanOotegem。谢谢你的提醒。我会的。我仍处于初级阶段。一旦实现了一个工作代码,我将按照您的建议应用于安全方面,如准备好的语句。但是如果我从代码中删除开头的信息结果集,则会显示表,在这种情况下,您是如何获得
$un
的?每次
获取
都会将内部结果光标移动到下一行。顺便说一句,第一个查询似乎每次只返回一条记录,是这样吗?如果是,您只需执行
foreach($info as$key=>$value)
,而不必在结果行中循环,因为只有一个结果行。@RomanHocke,您搞定了!正在删除fetch_数组的循环!关于每次抓取时光标移动到下一行的信息非常宝贵!非常感谢。请将您的评论移至答案。这样我就可以接受它并投票表决。非常感谢!