【问题标题】:XML malformed via MySQL multi-query通过 MySQL 多查询导致 XML 格式错误
【发布时间】:2016-11-28 16:54:03
【问题描述】:

我需要使用多个查询并将它们作为 as3 的格式发送出去。

当我只使用一个查询时,一切正常。

多查询操作时问题开始。

现在,当 //XML 标头被隐藏时,我在屏幕上打印了一个结构,它看起来不错。

但是当标头启用时,什么都不起作用!

请看我的代码:

<?php   
$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "test";
$dbTable = "pizzaroma";

$mysqli = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName);
if ($mysqli->connect_errno)
echo "la conection ha fallado: ".$mysqli->connect_errno;

$query = "SELECT * FROM ".$dbTable." WHERE cat='pizza' AND act='1'  ORDER BY ID ASC; ";
$query .= "SELECT * FROM ".$dbTable." WHERE cat='pasta' AND act='1'  ORDER BY ID ASC; ";    

if ($mysqli->multi_query($query)) {
     // header("Content-type: text/xml");
      echo "<?xml version='1.0' encoding='UTF-8'?>";
      echo "<pics>";
do { 
    echo "<theme name='temporaly'>";
    if ($result = $mysqli->store_result()) {

         while ($row = $result->fetch_assoc()) {

           echo "<pic name='".$row['NAME']."'  desc='".$row['DESCES']."' price='".$row['PRICE']."'/>";
           echo "</pic>";
        }
        $result->free();
    }
         echo "</theme>";
    if ($mysqli->more_results()) {          
    }

    } 
    while ($mysqli->next_result());  
        echo "</pics>";
}

    $mysqli->close();
    ?>

【问题讨论】:

  • 我在 PHP 和其他语言中经常看到这种情况。不要构建 XML 的字符串连接。 PHP 有专门的类,如 SimpleXML 和 DomDocument,带有 createElement()appendChild() 和其他方法。记住 XML 不是文本文件。
  • 另外,请解释或更好地显示:但是当标题启用时,什么都不起作用!。屏幕回显是否会通过多个查询切断 XML?这可能是 as3 问题而不是 PHP。
  • 感谢您的回复冻糕!所以,我应该使用串联以外的另一种方法。我稍后会看看它们(simpleXML),.. 响应第二部分,.. 现在我正在浏览器中执行 php,.. 工作时我转到 as3(但这仅发生在单行句子查询/ mysql ),......嘿!我正要发送它,但在我触摸这里和那里之前,......突然一切都像魅力一样飞舞。这就是我所做的,..

标签: php xml mysqli multi-query


【解决方案1】:

之前我使用“echo”,.. 现在我把“printf”放在那里,.. 但只有一些行,我不确定这是否是原因.. 但现在有效。它把我扔了

“严格标准:mysqli_next_result():没有下一个结果集。请调用 mysqli_more_results()/mysqli::more_results() 来检查是否调用此函数/方法”所以寻求帮助我找到了这一行那里:

 do{} while(mysqli_more_results($db) && mysqli_next_result($db));

解决了xml错误的问题。

<?php


$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "test";
$dbTable = "pizzaroma";

$mysqli = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName);
if ($mysqli->connect_errno)
echo "la conection ha fallado: ".$mysqli->connect_errno;

$query = "SELECT * FROM ".$dbTable." WHERE cat='pizza' AND act='1'  ORDER BY ID ASC; ";
$query .= "SELECT * FROM ".$dbTable." WHERE cat='pasta' AND act='1'  ORDER BY ID ASC; ";
$query .= "SELECT * FROM ".$dbTable." WHERE cat='carne' AND act='1'  ORDER BY ID ASC; ";


if ($mysqli->multi_query($query)) {
      header("Content-type: text/xml");
      printf( "<?xml version='1.0' encoding='UTF-8'?>");
      printf( "<pics>");
do { 
    printf( "<theme name='temporaly'>");
    if ($result = $mysqli->store_result()) {

         while ($row = $result->fetch_assoc()) {

           echo "<pic name='".$row['NAME']."'/>";

        }
        $result->free();
    }
         echo "</theme>";

    } 
    while (mysqli_more_results($mysqli) && mysqli_next_result($mysqli));

        echo "</pics>";
}

    $mysqli->close();
    ?>

后来我不得不序列化 xml 输出,这很容易:D

>> $i=1;   and ... do {printf( "<theme name='".$i++."'>");

但是现在,.. 我如何将输出序列 ID 与包含类别名称的数组中的元素相关联。类似...

如果 name="1" 那么 name="firtsArrayChild"

有什么想法吗? 但我认为那是另一个问题的另一首歌!谢谢

【讨论】:

    猜你喜欢
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多