在 non-object 上调用成员函数 bind_param()

Call to a member function bind_param() on a non-object

我知道还有很多其他类似的问题,但我发现 none 回答了我的问题。

我使用以下代码收到以下错误 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) returns:

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) returns:

NULL

我的查询是正确的,我在 phpMyAdmin 中试过了,它有效。

奇怪的是,这段代码在我的本地主机上工作,上传后它停止工作。

编辑

替换$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 设置,这些设置是否符合预期?

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