在字符串

时间:2016-04-14 16:10:53

标签: php mysqli pdo

我正在浏览使用MySQLi的教程,但我使用的是PDO而且我一直试图将问题归结为我收到此错误的原因:

  

致命错误:在第34行的D:\ Program Files(x86)\ xampp \ htdocs \ repos \ bla \ web \ inboxPage.php中调用字符串上的成员函数errorInfo()

这是我试图调用errorInfo()的地方,我之前使用mysql_error();作为教程,但这也引发了同样的错误。在使用errorInfo()之前,我正在四处查看是否有一个PDO equivelant到mysql_error(),它引导我看到你在下面看到的内容 - 我认为它会起作用。但它没有。

教程示例:

$query = "SELECT id, sender, subject, message FROM messages WHERE reciever='$user'";
$sqlinbox = mysql_query($query);

if(!$sqlinbox)
    {
    ?>
    <p><?php print '$query: '.$query.mysql_error();?></p>
    <?php
    }

我的例子:

$sql = 'SELECT id, Sender, Subject, Message FROM privatemessages WHERE Receiver = :receiver';
$stmt = $conn->prepare($sql);
$stmt->bindParam(':receiver', $user);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$result){
  ?>
  <p><?php print '$sql: '.$sql.errorInfo(); ?></p>
  <?php
}

这是我与数据库的连接:

$servername = 'localhost';
$user = 'root';
$pass = '';
$database = 'tutor_database';

try {
  $conn = new PDO("mysql:host=$servername;dbname=$database", $user, $pass);
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e){
  echo "Connection failed: " . $e->getMessage();
}

另外,我确实尝试了PHP手册网站的第一个例子 - &gt; http://php.net/manual/en/pdostatement.errorinfo.php并发现这样做了我:

  

PDO :: errorInfo中():   注意:第37行的D:\ Program Files(x86)\ xampp \ htdocs \ repos \ bla \ web \ inboxPage.php中的数组到字符串转换       $ sql:Array

...来代替。

我很欣赏这方面的一些帮助,因为我显然没有看到发生了什么。提前谢谢。

1 个答案:

答案 0 :(得分:1)

在PDO中,必须使用completely different method for the error reporting。简而言之,PDO将报告其错误,而无需编写任何代码。

所以只需取出错误报告部分,只留下

$sql = 'SELECT id, Sender, Subject, Message FROM privatemessages WHERE Receiver = :receiver';
$stmt = $conn->prepare($sql);
$stmt->bindParam(':receiver', $user);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);

这就是你所需要的一切。