在MySQL + PDO中显示警告

Jor*_*eFG 3 php mysql pdo

我想知道如何在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)

  • 如果您的列长度为25字符串但插入了26个字符的字符串怎么办?我认为PDO不会抛出异常,但是您的价值搞砸了吗? (2认同)