我在Windows上使用pdo_mysql时遇到了问题。 (还简要介绍了mysqli。) 它在我的Debian服务器上运行正常。但是,由于我的工作计算机设置了wamp或xampp服务器(两者都试过),我真的不能忽视仅限Windows的问题。
具体来说,这是我遇到问题的代码:
$sql = "SELECT `TABLE_NAME`, `TABLE_ROWS` FROM "
. "`information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = "
. ":schema AND `TABLE_NAME` NOT LIKE 'stf_%'";
$stmt = self::$pdo->prepare($sql);
$stmt->bindParam(':schema', self::$settings['schema']);
$stmt->execute();
$tables = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$stmt->closeCursor();
unset($sql,$stmt);
$return = [];
for ($i = 0; $i < count($tables); $i++) {
$table = $tables[$i]['TABLE_NAME'];
$rows = $tables[$i]['TABLE_ROWS'];
$sql = "SELECT * FROM `{$table}`";
$stmt = self::$pdo->prepare($sql);
$stmt->execute();
// This piece fails in Windows:
$return[$table][] = $stmt->fetchAll(\PDO::FETCH_ASSOC);
// I've also tried using loops with fetch.
// They work for a few rows and then crash.
unset($table,$sql,$stmt);
}
var_dump($return);
它会在某个模式中获取表的名称,然后将这些表的所有内容都提取到$return
数组中。当fetchAll
失败时,我尝试了各种循环,从foreach
到while
到for
的所有内容都会导致PHP在某些时候崩溃。
当某些表中某行数超过一行后,PHP会突然崩溃而不会在任何日志中产生任何错误。我将我的日志设置为最高调试级别,因为这是一个开发环境。
这正是我失败时所得到的:
HTTP / 1.1 200 OK
日期:2015年6月3日星期三13:55:29 GMT
服务器:Apache / 2.4.12(Win32)OpenSSL / 1.0.1l PHP / 5.6.8
X-Powered-By:PHP / 5.6.8
最后修改:
Accept-Ranges:bytes
内容长度:0
X-UA兼容:IE =边缘
X-Content-Type-Options:nosniff
保持活跃:超时= 5,最大= 99
连接:保持活力
Content-Type:text / html; charset = UTF-8
由于这个原因,我无法弄明白。
基本上我正在尝试采用写得不好的旧模式,并以符合我们新模式的方式在PHP中组织它。因此,我可以对某个数据进行单个调用,并使其独立于数据库是使用旧的还是新的模式。所以...向后兼容,基本上。
无论如何,这里是我使用相同代码从Debian服务器获得的数据的链接。 (证明它有效!) http://deviousconcepts.com/