在 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 配置中指定的服务器名称。
我知道还有很多其他类似的问题,但我发现 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 配置中指定的服务器名称。