我红了几个问题,但没有人帮忙
Fatal error: Call to a member function bind_param() on boolean in - >不。
Fatal error: Call to a member function prepare() on null - >都能跟得上。
Fatal error: Call to a member function count() on boolean - >都能跟得上。
Fatal error Call to a member function prepare() on null - >都能跟得上。
fatal error call to a member function prepare() on resource - >都能跟得上。
Error: Call to a member function prepare() on a non-object - >不。我完成了..
我在PDO中使用PHP5和mySql:
Connection和Select工作正常,但Insert不想工作。
那是我的职责:
function AddNewUser($nickname, $email)
{
ini_set('display_errors', 1); //DELETE ME
ini_set('expose_php', 1); //DELETE ME
$pdo = EstablishDBCon();
echo "Subscribe user..<br/>";
$sql = "INSERT INTO db.table (nickname, email, insertdate, updatedate) VALUES (:nickname, :email, :insertdate, :updatedate)";
try {
$stmt = $pdo->prepare($sql); //Error at this line
//id?
$stmt->bindParam(':nickname', $nickname, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->bindParam(':insertdate', date("Y-m-d H:i:s"), PDO::PARAM_STR);
$stmt->bindParam(':updatedate', null, PDO::PARAM_NULL);
$stmt->exeute();
CloseDBCon($pdo);
echo "Subscribed!<br/>";
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
DB模式是:
id(int not null auto_inc)|昵称(varchar not null)|电子邮件(varchar not null)| insertdate(datetime)| updatedate(datetime)
我是php新手,我不明白那种错误。 我在代码中标记了引发错误的行:
$stmt = $pdo->prepare($sql); //Error at this line
有人可以帮助我吗?
提前致谢!
//编辑: 连接又名db_connection.php:
<?php
echo 'Establishing MySQL Connection<br/>';
$pdo = null;
$dsn = 'mysql: host=xx; dbname=xx';
$dbUser = 'xx';
$pw = 'xx';
try {
$pdo = new PDO($dsn, $dbUser, $pw);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'Connection established.<br/>';
}
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
return $pdo;
?>
这是EstablishDBCon功能:
function EstablishDBCon()
{
$pdo = include_once 'db_connection.php';
return $pdo;
}
答案 0 :(得分:1)
重用函数的最佳方法是将其放在包含文件中,然后将其包含在您需要它的每个文件的顶部。因此,在db_connection.php
内,创建您的函数:
function EstablishDBCon()
{
$pdo = false;
try{
// Put your PDO creation here
} catch (Exception $e) {
// Logging here is a good idea
}
return $pdo;
}
现在您可以在任何需要的地方使用该功能。确保在使用之前始终确保$pdo !== false
,以确保您的连接没有失败。
答案 1 :(得分:0)
Call to a member function on boolean
表示$pdo
不是对象,它是布尔值。因此EstablishDBCon()
可能会在成功时返回true,否则返回false,而不是数据库资源。仔细检查该功能的文档。这是指向some relevant documentation on PDO that you'll need的链接。
答案 2 :(得分:0)
问题在于函数EstablishDBCon()
,它期望include_once
语句返回一个值,好像所包含文件的内容是一个函数一样。
function EstablishDBCon()
{
$pdo = include_once 'db_connection.php';
return $pdo;
}
如果已包含文件中的代码,则不会再次包含该代码,并且
include_once
会返回TRUE
。
这就是为什么你最终在TRUE
变量中使用$pdo
(布尔值)的原因。
无论如何,这种结构使您的代码很难遵循。
我建议只使用include
和朋友将自包含的PHP函数组合在一起,或者将HTML页面的部分嵌入到彼此中。