mysqli_set_charset在一台机器上出错

时间:2012-08-31 08:20:58

标签: php mysqli

我必须使用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。

它不能使用的机器在Windows 7上的XAMPP中使用PHP 5.4.4。

如果删除显示mysqli_set_charset($mysqli, "utf8");的行,则它适用于两台计算机,否则只能在Mac上运行。

编辑#3:

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

2 个答案:

答案 0 :(得分:0)

如果您的其他计算机正在运行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,我们需要更多信息,例如您的实际代码。

答案 1 :(得分:0)

以下代码应该没问题:

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