让我们考虑一个非常基本的表格:
CREATE TABLE test_warning (col_a INT NOT NULL, col_b INT NOT NULL)
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| col_a | int(11) | NO | | NULL | |
| col_b | int(11) | NO | | NULL | |
+-------+---------+------+-----+---------+-------+
当我插入一行而未指定其中一列时,会生成警告:
INSERT INTO test_warning (col_a) VALUES (1);
Query OK, 1 row affected, 1 warning (0.05 sec)
SHOW WARNINGS;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1364 | Field 'col_b' doesn't have a default value |
+---------+------+--------------------------------------------+
是否有人尝试在zend应用程序中使用SHOW WARNINGS
检索Zend_Db_Adapter
的输出?
我试过以下:
Zend_Db_Row
并保存它),错过列的值以引发警告。$adapter->query('SHOW WARNINGS')->fetchAll();
之类的命令。这将返回一个空数组。我开始相信Zend_Db_Adapter
对于通过SELECT
检索数据非常有用。
答案 0 :(得分:1)
有趣的问题。我只是运行测试,fetchAll()确实似乎返回MySQL警告的结果,至少对我来说!我正在运行ZF 1.12.0
首先,我在命令行上运行了一条SQL语句,其中字段的值超出了VARCHAR限制,并且列没有默认值。
结果如下:
mysql> INSERT INTO `myTable` (`example2`) VALUES ('a value that is too long');
mysql> show warnings;
+---------+------+-------------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------------+
| Warning | 1364 | Field 'example1' doesn't have a default value |
| Warning | 1265 | Data truncated for column 'example2' at row 1 |
+---------+------+-------------------------------------------------+
然后我使用Zend_Db运行相同的查询...
$stmt = $db->query(
'INSERT INTO `myTable` (`example2`) VALUES (\'a value that is too long\')'
);
$stmt = $db->query(
'SHOW WARNINGS;'
);
$result = $stmt->fetchAll();
echo '<pre>';
var_dump($result);
echo '</pre>';
以下是结果:
array(4) {
[0]=>
array(3) {
["Level"]=>
string(7) "Warning"
["Code"]=>
string(4) "1364"
["Message"]=>
string(44) "Field 'example1' doesn't have a default value"
}
[1]=>
array(3) {
["Level"]=>
string(7) "Warning"
["Code"]=>
string(4) "1265"
["Message"]=>
string(44) "Data truncated for column 'example2' at row 1"
}
}
这里的主要区别是我将SQL直接写入query()方法而不是使用Zend_db_Select构造它。值得一提的是,虽然理论上它不应该有所作为。