关于php用pdo预处理的方式连接数据库,出现错误
最近担心SQL注入,改变了SQL的写法,用PDO的预处理遇到点问题首先说我的文件结构:--conn.php数据库连接写在这里--login.php登陆界面--aaa.ph...
最近担心SQL注入,改变了SQL的写法,用PDO的预处理遇到点问题
首先说我的文件结构:
--conn.php 数据库连接写在这里
--login.php 登陆界面
--aaa.php 登陆后的某页面
一、conn.php中我是这么写的:
<?php
//数据库信息
define('DB_NAME', 'DB3');
define('DB_USER', 'root');
define('DB_PASSWORD', '4512345114');
define('DB_HOST', '211.333.221.215');
define('DB_CHARSET', 'utf8');
//数据库连接
try {
$DBH = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);
$DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$DBH->exec('SET CHARACTER SET '.DB_CHARSET);
$DBH->exec('SET NAMES '.DB_CHARSET);
} catch (PDOException $e) {
die();
}
//下面全是自定义函数
function shouru_all(){
$stmt = $DBH->prepare("select (ifnull(count(*),0)+1)*1000 shouru_all FROM aq_orderqueue where money_50= ?");
$stmt->execute(array("50"));
$rs = $stmt -> fetch();
return $rs[shouru_all];
}
等等自定义函数。。。
?>
二、在登陆界面用预处理,没一点问题,示例如下:
<?php
//打开session,载入conn.php
session_start();
include("conn.php");
//用预处理执行校验用户名和密码
$stmt = $DBH->prepare("select *,a.uid,a.login_date from aq_user a where a.login_id= ? and a.pwd= ? and manager>=0");
$stmt->execute(array(@$login_id,@$pwd));
$rs=$stmt->fetch();
$num=$stmt->rowCount();
///等等等等
?>
三、在aaa.php页面里用了个上面的自定义函数shouru_all(),结果不能用,提示Fatal error: Call to a member function prepare() on a non-object in D:\wamp\www\conn.php on line 41
aaa的具体代码如下:
<?php
session_start();
include("chksql.php");
include("conn.php");
header('Content-type: text/html;charset=utf-8');
//注:shouru_all()函数写在conn.php里
echo "当前总收入为:".shouru_all();
?>
请问如何解决,采用这种连接PDO连接的话,是不是不可以像以前那样只在conn里写上连接,别的文件来include它实现? 展开
首先说我的文件结构:
--conn.php 数据库连接写在这里
--login.php 登陆界面
--aaa.php 登陆后的某页面
一、conn.php中我是这么写的:
<?php
//数据库信息
define('DB_NAME', 'DB3');
define('DB_USER', 'root');
define('DB_PASSWORD', '4512345114');
define('DB_HOST', '211.333.221.215');
define('DB_CHARSET', 'utf8');
//数据库连接
try {
$DBH = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);
$DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$DBH->exec('SET CHARACTER SET '.DB_CHARSET);
$DBH->exec('SET NAMES '.DB_CHARSET);
} catch (PDOException $e) {
die();
}
//下面全是自定义函数
function shouru_all(){
$stmt = $DBH->prepare("select (ifnull(count(*),0)+1)*1000 shouru_all FROM aq_orderqueue where money_50= ?");
$stmt->execute(array("50"));
$rs = $stmt -> fetch();
return $rs[shouru_all];
}
等等自定义函数。。。
?>
二、在登陆界面用预处理,没一点问题,示例如下:
<?php
//打开session,载入conn.php
session_start();
include("conn.php");
//用预处理执行校验用户名和密码
$stmt = $DBH->prepare("select *,a.uid,a.login_date from aq_user a where a.login_id= ? and a.pwd= ? and manager>=0");
$stmt->execute(array(@$login_id,@$pwd));
$rs=$stmt->fetch();
$num=$stmt->rowCount();
///等等等等
?>
三、在aaa.php页面里用了个上面的自定义函数shouru_all(),结果不能用,提示Fatal error: Call to a member function prepare() on a non-object in D:\wamp\www\conn.php on line 41
aaa的具体代码如下:
<?php
session_start();
include("chksql.php");
include("conn.php");
header('Content-type: text/html;charset=utf-8');
//注:shouru_all()函数写在conn.php里
echo "当前总收入为:".shouru_all();
?>
请问如何解决,采用这种连接PDO连接的话,是不是不可以像以前那样只在conn里写上连接,别的文件来include它实现? 展开
2015-10-26
展开全部
加global $DBH;呢
追问
你说是因为$DBH作用域的问题?我觉得也可能是,但是global 没用过,怎么加?
最上面加了一行 global $DBH;
仍然提示这个。
追答
在shouru_all中加
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询