我试图在PHP连接一个mysql数据库与PDO。都在一个自建的手臂系统上。
如果在php中查询sql:
$sql="SELECT volume FROM measurements ORDER BY ID DESC LIMIT 1;";
都可以,但是如果我添加一个额外的条目,比如:
$sql="SELECT volume , temp , humidity FROM measurements ORDER BY ID DESC LIMIT 1;";
给我一个空白页。
- PHP日志显示没有错误
- 在php中激活额外的错误信息->相同的
- webserver lighttpd,将不会显示任何错误信息
我的Mysql服务器带来这个错误信息,每次如果我试图打开我的网页:2015-03-31T22:09:09.886345Z 26[注意]连接XXX到db: 'database' user: 'user' host: 'localhost'(读取通信包错误)
如果我查找netstat -a | grep mysql他们给我展示了很多mysql打开的连接,比如:
tcp 0 0 localhost:49050 localhost:mysql TIME_WAIT
这是我的最小PHP代码:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
try {
$conn = new PDO("mysql:host=127.0.0.1;dbname=fair_database", "root", "12345");
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql="SELECT volume , temp , humidity, co2, pressure FROM measurements ORDER BY ID DESC LIMIT 1;";
foreach ($conn->query($sql) as $row) {
$first_volume = number_format ( $row['volume'],1);
$first_temp = number_format ( $row['temp'],1);
$first_humidity = number_format ( $row['humidity'],1);
$first_co2 = number_format ( $row['co2'],1);
$first_pressure = number_format ( $row['pressure'],0);
}
$conn=null;
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}
?>
和额外的调试,我添加这个:
<?php
// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);
// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);
// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
if(@is_array($error = @error_get_last()))
{
return(@call_user_func_array('ErrorHandler', $error));
};
return(TRUE);
};
register_shutdown_function('ShutdownHandler');
// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
$_ERRORS = Array(
0x0001 => 'E_ERROR',
0x0002 => 'E_WARNING',
0x0004 => 'E_PARSE',
0x0008 => 'E_NOTICE',
0x0010 => 'E_CORE_ERROR',
0x0020 => 'E_CORE_WARNING',
0x0040 => 'E_COMPILE_ERROR',
0x0080 => 'E_COMPILE_WARNING',
0x0100 => 'E_USER_ERROR',
0x0200 => 'E_USER_WARNING',
0x0400 => 'E_USER_NOTICE',
0x0800 => 'E_STRICT',
0x1000 => 'E_RECOVERABLE_ERROR',
0x2000 => 'E_DEPRECATED',
0x4000 => 'E_USER_DEPRECATED'
);
if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
{
$name = 'E_UNKNOWN';
};
return(print(@sprintf("%s Error in file 'xBB%s'xAB at line %d: %s'n", $name, @basename($file), $line, $message)));
};
$old_error_handler = set_error_handler("ErrorHandler");
// other php code
?>
结果是一样的,只有一个空白页,没有php错误。其他错误将被记录在php错误日志文件中。: - (
我试图扩大最大的包和等待时间从mysql,但没有帮助。在这种情况下我该怎么办呢?谢谢你
编辑:发现很多失败,我改什么来找我的问题
您的应用程序在Linux上运行吗?如果应用程序更频繁地创建和关闭连接,就会发生这种情况。TCP连接需要几个步骤来关闭连接,如果你的应用程序在关闭连接之前死了,运行MySql的服务器会等待一段时间来进行必要的TCP握手。
你可以尝试增加MySql的max_connections来增加更多的连接空间。如果问题仍然存在,请尝试调整/etc/sysctl.conf
中的内核参数net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_recycle = 1
同时请检查应用程序是否正确处理连接