本地正常的PHP MySQL CRUD Demo在GoDaddy服务器出现500错误求助
解决GoDaddy主机上
mysqli_stmt::get_result()未定义的500错误 这个问题我之前帮朋友处理过,核心原因很明确:你的GoDaddy共享主机PHP环境没有启用mysqlnd扩展,而mysqli_stmt::get_result()方法必须依赖这个扩展才能运行,本地环境(比如XAMPP/WAMP)默认是开启的,所以本地测试正常。
下面给你两种可行的解决方案,按优先级来:
方案1:在GoDaddy cPanel中启用mysqlnd扩展
这是最简单的方法,如果主机允许的话:
- 登录你的GoDaddy cPanel后台,找到Select PHP Version(或者叫PHP Configuration之类的选项)
- 进入后切换到「Extensions」标签页
- 在扩展列表里找到
mysqlnd,勾选它,然后点击页面底部的「Save」按钮 - 等待1-2分钟让PHP配置生效,然后刷新页面测试
如果找不到这个选项,或者勾选后保存失败,那可能是GoDaddy的共享主机限制了这个扩展,那就用方案2。
方案2:修改代码,替换get_result()的用法
我们可以用bind_result()和fetch()来替代get_result(),这是不依赖mysqlnd的标准用法,兼容性更好。修改你的read.php代码如下:
修改后的核心代码段:
if($stmt = $mysqli->prepare($sql)){ // Bind variables to the prepared statement as parameters $stmt->bind_param("i", $param_id); // Set parameters $param_id = trim($_GET["id"]); // Attempt to execute the prepared statement if($stmt->execute()){ // 绑定结果到变量,注意顺序要和SELECT *返回的字段顺序一致(id, name, address, salary) $stmt->bind_result($id, $name, $address, $salary); // 获取结果行 if($stmt->fetch()){ // 这里变量已经被赋值,直接使用即可 } else{ // URL doesn't contain valid id parameter. Redirect to error page header("location: error.php"); exit(); } } else{ echo "Oops! Something went wrong. Please try again later."; } }
同时修改页面输出部分:
把原来的:
<p class="form-control-static"><?php echo $row["name"]; ?></p> <p class="form-control-static"><?php echo $row["address"]; ?></p> <p class="form-control-static"><?php echo $row["salary"]; ?></p>
改成:
<p class="form-control-static"><?php echo $name; ?></p> <p class="form-control-static"><?php echo $address; ?></p> <p class="form-control-static"><?php echo $salary; ?></p>
这样修改后,代码就不依赖mysqlnd扩展了,在GoDaddy的主机上应该能正常运行。另外,如果你还有update.php等其他用到get_result()的文件,也需要用同样的方法替换哦。
内容的提问来源于stack exchange,提问作者ciresuark
相关产品推荐
相关产品推荐

