我想知道如何在MySQL + PDO中获取警告计数.
在控制台中进行查询时,我发出警告,寻找varchar而不是添加aphostrophes(' ').
mysql> describe keywords;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| document_id | int(11) | NO | MUL | NULL | |
| keyword | char(50) | NO | | NULL | |
| value | varchar(250) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> select * from keywords where value = 1234567890;
+-----+-------------+--------------------+------------+
| id | document_id | keyword | value |
+-----+-------------+--------------------+------------+
| 311 | 71 | Nº de Operacion | 1234567890 |
+-----+-------------+--------------------+------------+
1 row in set, 12 warnings (0.00 sec)
mysql> show warnings;
+---------+------+---------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: '1234-0' |
Run Code Online (Sandbox Code Playgroud)
我有一个参数化查询,我想知道该查询是否也生成警告,或者如果在参数化它时值是字符串或整数也无关紧要.
例:
'SELECT * FROM keywords WHERE value = :value'
Run Code Online (Sandbox Code Playgroud)
可以用于搜索整数和字符串,还是应该添加aphostrophes:
'SELECT * FROM keywords WHERE value = \':value\''
Run Code Online (Sandbox Code Playgroud)
用于搜索varchar.顺便说一下,没有给出结果.
You*_*nse 10
好吧,据我所知,除了显式运行SHOW WARNINGS查询之外没有办法.
但老实说,我认为在PHP中使用mysql警告没什么意义.只需要在开发阶段就可以使用它们,但在实时服务器上应该没有任何可以引发警告的查询.
关于你对截断值的怀疑 - 它们毫无根据.准备好的陈述不是你想象的那样.当使用预准备语句时,PDO 永远不会产生可能引发这样警告的查询.
只需摆脱这些错误的引号,运行正确的查询,并看到:
$stm = $pdo->prepare('SELECT * FROM keywords WHERE value = :value');
$stm->execute(array(':value'=>'whatever'));
$stm = $pdo->query('SHOW WARNINGS');
var_dump($stm->fetchAll());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4447 次 |
| 最近记录: |