Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 致命错误:对整数调用成员函数prepare()_Php_Mysql_Function_Pdo_While Loop - Fatal编程技术网

Php 致命错误:对整数调用成员函数prepare()

Php 致命错误:对整数调用成员函数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`

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

我有一个函数,它将收集用户X的所有信息,由变量$u SESSION['username']表示

我的问题是:我得到了错误标题。但是我想收集字符串和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");

?>

之所以发生这种情况,是因为
$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注入问题。您应该将绑定参数用于您的应用程序。