在非对象PHP帮助上调用成员函数prepare()
我正在尝试编写一个
PHP函数.这很简单它只是一个准备好的语句来查询数据库,但是我无法让它工作.我不断收到错误调用一个非对象的成员函数prepare().这里是代码:
$DBH = new mysqli("host","test","123456","dbname"); function selectInfo($limit,$offset){ $stmt = $DBH->prepare("SELECT * FROM information LIMIT ?,?"); $stmt->bind_param("ii",$limit,$offset); $stmt->execute(); } selectInfo(); 任何时候我调用函数我得到这个错误.有人可以帮忙吗?
这是一个范围错误.您正在使$DBH成为全局变量.所以当你输入函数时,全局变量是不可用的.你有5个真正的选择.
1.使用全局关键字 function doSomething() { global $DBH; //... 这不是一个好主意,因为它使维护和测试成为一个PITA.想象一下,尝试调试该函数调用.你现在需要去找出$DBH被定义在哪里,试图弄清楚发生了什么事情 2.使$DBH成为函数的一个参数 function doSomething(MySQLi $DBH) { 它具有明确的优点.但是,由于调用代码需要跟踪全局变量,所以仍然不太好. 3.创建一个函数来“获取”$DBH对象 function getDBH() { static $DBH = null; if (is_null($DBH)) { $DBH = new mysqli(...); } return $DBH; } function doSomething() { $DBH = getDBH(); } 这具有完全摆脱全局变量问题的优点.但是,也难以拥有多个连接或重新使用其他连接的任何代码. 4.创建一个类来包装数据库访问 class Database { public function __construct($host,$user,$pass) { $this->DBH = new MySQli($host,$pass); } public function doSOmething() { $this->DBH->foo(); } } 这封装了你的一切.所有数据库访问将通过一个类,所以您不需要担心全局变量访问或其他任何事情. 5.使用预构建的类/框架 这是最好的选择,因为你不需要担心自己做. 数据库访问类: > A quick google search to get you started 完整框架: > Zend Framework 真的,选择是无止境的.找到你喜欢的东西,并坚持下去.真的会让你的生活更轻松 祝你好运! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |