【问题标题】:Ajax XML Error When Using PHP PDO使用 PHP PDO 时出现 Ajax XML 错误
【发布时间】:2014-01-16 14:27:17
【问题描述】:

我最近将用于访问数据库的代码切换为 PHP PDO 对象。 我的 ajax 页面接受了所有工作。据我所知,所有查询和数据都被正确提取,但是当我尝试使用 PDO 时出现以下错误,这是以前使用 mysql_connect 对象工作的。 我确实发现,如果我注释掉这些行,它会运行,但是它无法运行查询,这显然会导致更多错误。

//ini_set('include_path', 'C:\www\capc\libraries');
//include '/php/capc.php';
//include '/php/bio.php'; 

错误信息:

This page contains the following errors:
error on line 4 at column 6: XML declaration allowed only at the start of the document
Below is a rendering of the page up to the first error.

CAPC类查询函数

public function query($sql) {
    try {
        $handler = new PDO('mysql:host=' . $this->dbhost . ';dbname=capc', $this->dbuser, $this->dbpass);
        $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
    $query = $handler->prepare($sql);
    $query->execute();
    return $query;
}

Ajax.php

<?php
ini_set('include_path', 'C:\www\capc\libraries');
include '/php/capc.php';
include '/php/bio.php';
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
$bio_first = $_GET['First_Name'];
$bio_last = $_GET['Last_Name'];
if (!empty($bio_first) && !empty($bio_last)) {
$capc = new CAPC;
$sql = 'SELECT Bio_ID FROM `bio_users` WHERE Bio_First = "' . $bio_first . '" AND Bio_Last = "' . $bio_last . '";';
$query = $capc->query($sql);
$num_results = $query->rowCount();
}

echo '<bio>';
if ($num_results > 0) {
$bio_first = $capc->sanitize($bio_first, "string");
$bio_last = $capc->sanitize($bio_last, "string");
$bio = new Bio($bio_first, $bio_last);
echo '<bio_exists>';
echo 'True';
echo '</bio_exists>';
echo '<bio_fname>';
echo $bio->Bio_First;
echo '</bio_fname>';
echo '<bio_lname>';
echo $bio->Bio_Last;
echo '</bio_lname>';
echo '<bio_img>';
echo $bio->Bio_Img;
echo '</bio_img>';
} else {
echo '<bio_exists>';
echo 'False';
echo '</bio_exists>';
}
echo '</bio>';
?>

【问题讨论】:

  • 确保ajax.php中的开始标签前没有空格
  • 也尝试一些解决方案,stackoverflow.com/questions/5479533/…
  • @dreamweiver 为什么目前似乎没有任何空白区域会在 标记之前回显到页面?
  • 鉴于您的 &lt;?xml 在第 4 行,您应该查看第 1-3 行的内容会导致该错误。
  • 我认为这与使用 ini_set 将包含路径设置为有关,但我不确定为什么

标签: php ajax pdo


【解决方案1】:

最终通过移动 bio.php 的包含来使其工作,不知道为什么现在可以工作而以前不会。

工作 Ajax.php

<?php
ini_set('include_path', 'C:\www\capc\libraries');
include '/php/capc.php';

$bio_first = $_GET['First_Name'];
$bio_last = $_GET['Last_Name'];
if (!empty($bio_first) && !empty($bio_last)) {
$capc = new CAPC;
$sql = 'SELECT Bio_ID FROM `bio_users` WHERE Bio_First = "' . $bio_first . '" AND Bio_Last = "' . $bio_last . '";';
$query = $capc->query($sql);
$num_results = $capc->query($sql)->rowCount();
}
if ($num_results > 0) {
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
echo '<bio>';
$bio_first = $capc->sanitize($bio_first, "string");
$bio_last = $capc->sanitize($bio_last, "string");
include '/php/bio.php';
$bio = new Bio($bio_first, $bio_last);
echo '<bio_exists>';
echo 'True';
echo '</bio_exists>';
echo '<bio_fname>';
echo $bio->Bio_First;
echo '</bio_fname>';
echo '<bio_lname>';
echo $bio->Bio_Last;
echo '</bio_lname>';
echo '<bio_img>';
echo $bio->Bio_Img;
echo '</bio_img>';
} else {
echo '<bio_exists>';
echo 'False';
echo '</bio_exists>';
}
echo '</bio>';
?>

【讨论】:

  • 在您发布问题的那一刻,您收到了一条带有解释的评论。
  • 仍然没有意义,为什么移动一个包含应该改变任何东西?
  • 包含一个文件与在该精确点粘贴其内容完全相同。如果文件生成输出(例如错误消息或空行),则输出将在那里。请记住,PHP 可以在没有 echo 语句的情况下生成输出,例如:&lt;?php ...?&gt;Output
  • K 感谢您提供的信息,没有在我的脑海中注册以检查 bio.php 中的其他包含
猜你喜欢
  • 1970-01-01
  • 2015-05-02
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 2017-02-07
相关资源
最近更新 更多