mysqli_set_charset在一台机器上出现错误


mysqli_set_charset gives error on one machine

我必须使用XAMPP进行开发的机器。我刚把文件从一台机器移到另一台机器,现在调用mysqli_set_charset和bind_param时出错。它在一台机器上工作。

编辑:这是我得到的错误:

PHP致命错误:在非对象上调用成员函数bind_param()

我的代码:

$mysqli = new mysqli("localhost", "root", "123", "myDatabase");
mysqli_set_charset($mysqli, "utf8");
//Checks if the user exists
$stmt = $mysqli->prepare("SELECT * FROM profiles WHERE email = ? AND password = md5(?) LIMIT 1");
$stmt -> mysqli_stmt_bind_param("ss", $email, $pass);
$stmt -> execute();

编辑#2:

它工作的机器在Mac OS 10.8.1上使用XAMPP中的PHP 5.3.1,目前还没有更新版本的XAMPP。

它不工作的机器在Windows7上使用XAMPP中的PHP 5.4.4。

如果我去掉mysqli_set_charset($mysqli, "utf8");这行,它在两台机器上都能工作,否则,只在Mac上工作。

编辑#3:

我测试了将password = md5(?)更改为仅password = ?,然后它就工作了。密码不匹配,但我不再收到错误。我不打算在未来使用md5,但我想暂时使用它,我需要将字符集设置为utf8。我该如何解决?

如果您的另一台机器正在运行PHP 5.4:

This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.

(来自http://www.php.net/manual/en/function.mysqli-bind-param.php)bind_param是mysqli_stmt_bind_param的别名,您应该使用该

如果不是PHP 5.4,我们需要更多信息,比如您的实际代码。

以下代码应该很好:

PHP
$stmt = $mysqli->prepare("SELECT * FROM profiles WHERE email = ? AND password = md5(?) LIMIT 1");
$stmt -> bind_param("ss", $email, $pass);
$stmt -> execute();