【发布时间】:2012-06-21 06:01:05
【问题描述】:
我正在尝试从MySQL移动到MySQLi,但遇到了一些问题。 MySQLiconnection 开始如下图:
$langCon=mysqli_connect('localhost', 'root', '', 'english');
if (!$langCon) die('Couldn\'t connect: '.mysqli_error());
我正在尝试使用MySQLi 来存储我的会话数据,但是,我的 _write 构造始终出现错误(未完成,因为错误发生在第 56 行,所以像这样发布with$stmt=...):
function _write($id, $data){ /
global $langCon;
$stmt=mysqli_prepare($langCon,'REPLACE INTO `sess`(`id`,`access`,`data`) VALUES(?,?,?)');
$id = mysqli_real_escape_string($langCon,$id);
$data = mysqli_real_escape_string($langCon,$data);
$t=$_SERVER['REQUEST_TIME'];
return mysqli_query($langCon,"REPLACE INTO `sess`(`id`,`access`,`data`) VALUES('$id','$t','$data')");
}
给出的错误是:Warning: mysqli_prepare() expects parameter 1 to be mysqli, null given in [...]settings.php on line 56(行是 $stmt=...)
谁能告诉我我的问题可能出在哪里?
EDIT 函数外的变量转储,var_dump($langCon):
object(mysqli)#2 (18) { ["affected_rows"]=> int(0) ["client_info"]=> 字符串(50)“mysqlnd 5.0.8-dev - 20102224 - $修订:321634 $” ["client_version"]=> int(50008) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(10) "5.5.21-log" ["server_version"]=> int(50521) ["stat"]=> 字符串(130)“正常运行时间:373 线程:1 问题:5 慢查询:0 打开:34 刷新表:1 打开表:每秒 27 次查询平均: 0.013" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(5) ["warning_count"]=> int(0) }
函数内部的变量转储,global $langCon; var_dump($langCon);: NULL。
【问题讨论】:
-
在prepare开始时不使用$langCon试试?
-
您的连接代码是否包含在函数中?你是否也在那里声明了
$langConglobal? -
@Bono 警告:mysqli_prepare() 只需要 2 个参数,给定 1 个
-
@lanzz:我的连接代码不在函数中。它与
_write($id, $data)在同一个文件中。 -
你确定你在联系
_write()之后?因为我们无法从您发布的代码中知道这一点。