【问题标题】:MySQLi acting out in functionsMySQLi 在函数中发挥作用
【发布时间】: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试试?
  • 您的连接代码是否包含在函数中?你是否也在那里声明了$langCon global?
  • @Bono 警告:mysqli_prepare() 只需要 2 个参数,给定 1 个
  • @lanzz:我的连接代码不在函数中。它与_write($id, $data)在同一个文件中。
  • 你确定你在联系_write()之后?因为我们无法从您发布的代码中知道这一点。

标签: php mysqli


【解决方案1】:

来自手册;尝试这样的事情(它必须看起来像 $var->prepare)

$mysqli = new mysqli("localhost", "root", "", "english");
if ($mysqli->connect_errno) 
{
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

if (!($stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"))) 
{
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

【讨论】:

  • 我的程序风格和你的 OO 风格都在函数之外工作,但是,当我在 _write() 中尝试 OO 风格时,我得到Fatal error: Call to a member function prepare() on a non-object
  • @Limoncello 并且 $mysqli 设置在该代码中? AKA 你可以访问它(我看到你把 $langCon 设置为全局,$mysqli 是全局的吗?)
  • 是的,我的_write()函数以global $langCon, $mysqli;开头
  • @Limoncello 你试过 mysqli_prepare($mysqli, 'SQL'); ?因为它要求 mysqli()。你也得到了所有的错误报告吗?
  • 然后我得到 Warning: mysqli_prepare() expects parameter 1 to be mysqli, null given 。这就是我在这里感到沮丧的原因,我按照手册做了所有事情,将需要全局的所有内容声明为全局,但仍然会出错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-20
相关资源
最近更新 更多