最近担心SQL注入,改变了SQL的写法,用PDO的预处理遇到点问题首先说我的文件结构:--conn.php数据库连接写在这里--login.php登陆界面--aaa.php登陆后的某页面一、conn.php中我是这么写...
最近担心SQL注入,改变了SQL的写法,用PDO的预处理遇到点问题
首先说我的文件结构:
--conn.php 数据库连接写在这里
--login.php 登陆界面
--aaa.php 登陆后的某页面
一、conn.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];
}
等等自定义函数。。。
?>
二、在登陆界面用预处理,没一点问题,示例如下:
//打开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的具体代码如下:
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它实现?
展开