【问题标题】:php mysql server gone awayphp mysql 服务器消失了
【发布时间】:2014-05-16 21:43:33
【问题描述】:

我正在开发的脚本有问题。我正在 Windows XAMPP 上对其进行测试,并且我有一个数据库和一个表,我正在尝试插入一行。我正在使用 mysqli 扩展并使用准备好的语句来防止sql注入。但是当我执行查询时,我得到了错误2006:MySQL服务器消失,但服务器运行良好。服务器是我自己的计算机。所以我不知道会发生什么。

这是我正在使用的代码:

<?php
header('Content-type: text/html; charset=utf-8');
if(isset($_GET['user']) && isset($_GET['pass'])){
    $db = new mysqli("localhost", "root", "", "admin");
    if ($db->connect_errno) {
        echo "Falló la conexión a MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }
    if (!($db = $db->prepare("INSERT INTO logins(user,pass,ip,url) VALUES (?,?,?,?)"))) {
        echo "Falló la preparación: (" . $mysqli->errno . ") " . $mysqli->error;
    }
    if (!$db->bind_param('ssss', $_GET['user'],  $_GET['pass'],$_SERVER['REMOTE_ADDR'],$_SERVER["HTTP_REFERER"])){
        echo "Falló la vinculación de parámetros: (" . $db->errno . ") " . $db->error;
    }
    if (!$db->execute()) {
        echo "Falló la ejecución: (" . $db->errno . ") " . $db->error;
    }
    $db->close();
}

?>

谢谢

编辑:我忘了说我曾尝试使用 ini_set 技巧,但没有奏效

【问题讨论】:

  • 看这里:stackoverflow.com/questions/7942154/… 可以是超时或小数据包,你每次都收到吗?
  • 也可以查看这个答案stackoverflow.com/a/12792977 也可以查看 MySQL.com 页面dev.mysql.com/doc/refman/5.0/en/gone-away.html --- 谷歌搜索错误消息会产生很多结果。
  • 正如我所说的我已经尝试使用 ini_set,现在我也尝试将 max_allowed_pa​​cket 修改为 16M 和同样的错误。我在问之前搜索了很多,我发现是你发布的对我来说
  • 等等,$db = $db-&gt;prepare 在 mysqli 中可行吗?无法重新分配 $db 变量导致断开连接?您可以尝试将其分配给另一个变量吗? $stmt 什么的...
  • @KePimbo Uriel_SVK 有一个观点。您似乎正在覆盖您的 $db 变量。看到这个答案stackoverflow.com/a/19599838

标签: php mysql mysqli


【解决方案1】:

我认为问题出在$db = $db-&gt;prepare,重新分配$db 变量可能会导致断开连接。试着这样写:

$db = new mysqli("localhost", "root", "", "admin");
$stmt = $db->prepare("INSERT INTO logins(user,pass,ip,url) VALUES (?,?,?,?)");
$stmt->bind_param('ssss', $_GET['user'],  $_GET['pass'],$_SERVER['REMOTE_ADDR'],$_SERVER["HTTP_REFERER"]);
$stmt->execute();
$db->close();

【讨论】:

  • 很好地抓住了那个+1
【解决方案2】:

您的连接字符串错误应该是这样的:(除非您有一个名为 admin 的数据库并且没有密码)

$db = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

【讨论】:

  • 是的,我有一个名为 admin 的数据库和没有密码的 root (但因为它是我的计算机,我只在哪个网络中,并且路由器中的 mysql 端口关闭没关系)
猜你喜欢
  • 2012-05-25
  • 2015-02-20
  • 2011-11-09
  • 2010-09-14
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 2018-05-01
相关资源
最近更新 更多