致命错误:在整数上调用成员函数prepare()

时间:2016-04-20 15:12:59

标签: php mysql function pdo while-loop

我在网站上工作; apache要求我升级到PDO的新方法。

我的功能将收集用户X的所有信息,由变量$ _SESSION ['用户名']表示。

我的问题是:我收到错误标题。但是我想收集String和INT值。

我的功能:functions.php

function getDetails($username) {
    $db = require("dbConn.php");
    $sql = $db->prepare("SELECT * FROM `es42_members` WHERE HandleName='$username'");
    $sql->execute();
    $row = $sql->fetchAll();

    return $row;
}

我的索引文件:index.php

$details = getDetails($_SESSION['username']);

while ($row = $details->fetch_assoc())  {
    $id = $row['UserID'];
    $email = $row['Email']; // This return String
    $isAdmin = $row['isAdmin']; //This return 0 - 1. But in the table is registered by String (Varchar).
}

echo "Your email is: $email";
if($isAdmin == "1"){ echo "You are a admin!" }

更新 我的新代码如下:

功能:@Marcus

function getDetails($username) {
    require("dbConn.php");
    $sql = $db->prepare("SELECT * FROM `es42_members` WHERE HandleName='$username'");
    $sql->execute();
    $row = $sql->fetchAll();

    return $row;
}

dbConn.php [原创]

<?php 

$db = new PDO('mysql:host=localhost;dbname=ProfileTest', "root", "1234");
$db = null;

?>

dbConn.php [已编辑并正常工作]

<?php 

$db = new PDO('mysql:host=localhost;dbname=ProfileTest', "root", "1234");

?>

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为$db实际上并未持有PDO连接对象。您已将dbConn.php脚本本身(成功包含返回1)分配给$db,这就是您收到相关整数错误的原因。

您的dbConn.php文件应如下所示(请将dbConn.php添加到您的原始帖子进行验证):

// dbConn.php
$db = new PDO($dsn, $user, $password); // PDO has been instantiated and $db is holding the object

然后在你的functions.php脚本中:

function getDetails($username) {
    require("dbConn.php"); // require me, don't assign me to a variable
    $sql = $db->prepare("SELECT * FROM `es42_members` WHERE HandleName='$username'");
    $sql->execute();
    $row = $sql->fetchAll();

    return $row;
}

您只需要求 dbConn.php,而不是将其分配给任何变量。

答案 1 :(得分:0)

由于您的错误消息显示

  

“致命错误:在整数”

上调用成员函数prepare()

我假设你的getDetails函数中弹出错误,你调用"sql = $db->prepare ..."

所以错误来自你的$ db变量。发布您的“dbConn.php”文件以获取更多详细信息。