在非对象上调用成员函数bind_param()

时间:2015-01-05 20:57:24

标签: php mysql prepared-statement

我知道还有很多这样的问题,但我发现没有一个问题可以回答我的问题。

我使用以下代码获得以下错误Call to a member function bind_param() on a non-object

$servername = "localhost";
$username = "MyUsername";
$password = "MyPassword";
$dbname = "MyDatabase";

$conn = new mysqli($servername, $username, $password, $dbname);
var_dump($conn);
$stmt = $conn->prepare("SELECT COUNT(email) FROM subscribers WHERE email LIKE ?");
var_dump($stmt);
$stmt->bind_param("s", $email);
$stmt->execute();

var_dump($ conn)返回:

object(mysqli)#2 (19) { ["affected_rows"]=> NULL ["client_info"]=> NULL ["client_version"]=> int(50011) ["connect_errno"]=> int(2002) ["connect_error"]=> string(25) "No such file or directory" ["errno"]=> NULL ["error"]=> NULL ["error_list"]=> NULL ["field_count"]=> NULL ["host_info"]=> NULL ["info"]=> NULL ["insert_id"]=> NULL ["server_info"]=> NULL ["server_version"]=> NULL ["stat"]=> NULL ["sqlstate"]=> NULL ["protocol_version"]=> NULL ["thread_id"]=> NULL ["warning_count"]=> NULL } 

和var_dump($ stmt)返回:

NULL

我的查询是正确的,我在phpMyAdmin中尝试过,它可以工作。

奇怪的是,这个确切的代码在我的localhost上工作,在上传后它停止工作。

修改

替换$stmt->execute();
if(!$stmt->execute()){trigger_error("there was an error....".$conn->error, E_USER_WARNING);}

添加error_reporting(E_ALL); ini_set('display_errors', 1);我收到以下错误:

Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in [...]

Warning: mysqli::prepare(): Couldn't fetch mysqli in [...]

Warning: main(): Couldn't fetch mysqli in [...]

编辑2

Mysqli settings

以下是我的mysqli设置,这些是它们的意图吗?

1 个答案:

答案 0 :(得分:0)

所以我联系了托管公司,解决方案非常简单。在连接到数据库时,我使用“localhost”作为服务器名称,当您使用共享主机服务时,该服务器名称不起作用。我需要做的就是将其更改为MySQL配置中指定的服务器名称。