Php 致命错误:对整数调用成员函数prepare()
我在一个网站上工作;apache要求我升级到PDO的新方法 我有一个函数,它将收集用户X的所有信息,由变量$u SESSION['username']表示 我的问题是:我得到了错误标题。但是我想收集字符串和INT值 我的函数:functions.phpPhp 致命错误:对整数调用成员函数prepare(),php,mysql,function,pdo,while-loop,Php,Mysql,Function,Pdo,While Loop,我在一个网站上工作;apache要求我升级到PDO的新方法 我有一个函数,它将收集用户X的所有信息,由变量$u SESSION['username']表示 我的问题是:我得到了错误标题。但是我想收集字符串和INT值 我的函数:functions.php function getDetails($username) { $db = require("dbConn.php"); $sql = $db->prepare("SELECT * FROM `es42_members`
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");
?>
之所以发生这种情况,是因为
$db
实际上没有保存PDO连接对象。您已经将dbConn.php
脚本本身(成功包含时返回1)分配给$db
,这就是您收到有问题的整数错误的原因
您的dbConn.php
文件应如下所示(请将dbConn.php添加到原始帖子中以进行验证):
然后在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
,而不将其分配给任何变量。之所以发生这种情况,是因为$db
实际上没有保存PDO连接对象。您已经将dbConn.php
脚本本身(成功包含时返回1)分配给$db
,这就是您收到有问题的整数错误的原因
您的dbConn.php
文件应如下所示(请将dbConn.php添加到原始帖子中以进行验证):
然后在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
,而不将其分配给任何变量。因为您的错误消息显示
“致命错误:对整数调用成员函数prepare()”
我假设在您的getDetails函数中会弹出错误,您可以在其中调用“sql=$db->prepare…”
因此,错误来自$db变量。发布您的“dbConn.php”文件以了解更多详细信息。因为您的错误消息显示 “致命错误:对整数调用成员函数prepare()” 我假设在您的getDetails函数中会弹出错误,您可以在其中调用
“sql=$db->prepare…”
因此,错误来自$db变量。发布“dbConn.php”文件以了解更多详细信息。查看错误说明<代码>对整数调用成员函数prepare()。这意味着
$db
是一个整数,而不是数据库连接。此外,您通常希望每个请求只连接到数据库一次,并将其作为参数传递给任何需要它的函数,或将其存储为类属性。如果将连接放在getDetails
函数中,则脚本中的其他任何地方都无法重用。请逐行检查dbConn.php
文件,我认为错误非常明显。来吧,你根本就没试过。@Mike哦,是的,我必须删除$db=null;。谢谢。当您最终让它工作时,请确保您解决了SQL注入问题。您应该使用绑定参数进行准备。请查看错误说明<代码>对整数调用成员函数prepare()。这意味着$db
是一个整数,而不是数据库连接。此外,您通常希望每个请求只连接到数据库一次,并将其作为参数传递给任何需要它的函数,或将其存储为类属性。如果将连接放在getDetails
函数中,则脚本中的其他任何地方都无法重用。请逐行检查dbConn.php
文件,我认为错误非常明显。来吧,你根本就没试过。@Mike哦,是的,我必须删除$db=null;。谢谢。当您最终让它工作时,请确保您解决了SQL注入问题。您应该将绑定参数用于您的应用程序。