Re: Re: PDO Mysql data truncation missing error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 21, 2012 at 4:44 PM, Matt Pelmear <mjpelmear@xxxxxxxxx> wrote:
> Amit,
>
> Thanks for the suggestion. Unfortunately, even when I explicitly enable
> E_WARNING or even E_ALL error reporting in php I still do not receive any
> indication that data was truncated on insert.
>
> -Matt
>
>
> On 08/21/2012 07:09 AM, Amit Tandon wrote:
>>
>>
>> Dear Matt,
>>
>> Even with MySQL, u get the warning as the show warnings is enabled. With
>> php bound scripts, you have to check warnings  to see the warnings. However,
>> php is quite flexible and you an use error_reporting(E_WARNING) for
>> non-fatal error reporting
>>
>> regds
>> amit
>>
>> On Aug 21, 2012 10:41 AM, "Matt Pelmear" <mjpelmear@xxxxxxxxx
>> <mailto:mjpelmear@xxxxxxxxx>> wrote:
>>
>>     On 08/21/2012 01:08 AM, David Robley wrote:
>>
>>         Matt Pelmear wrote:
>>
>>             Hello,
>>
>>             I'm trying to detect data truncation on insert to MySQL
>>             using PDO.
>>
>>             As far as I can tell, this gets reported at least in some
>>             cases (ex:
>>             http://drupal.org/node/1528628), but I have been unable to
>>
>>             see this
>>             myself.
>>
>>             The test table I'm using has a column that is VARCHAR(5):
>>
>>             mysql>  describe test;
>>             +-------+------------------+------+-----+---------+-------+
>>
>>             | Field | Type             | Null | Key | Default | Extra |
>>             +-------+------------------+------+-----+---------+-------+
>>
>>             | id    | int(10) unsigned | YES  |     | NULL    |       |
>>             | data  | varchar(5)       | YES  |     | NULL    |       |
>>             +-------+------------------+------+-----+---------+-------+
>>
>>             2 rows in set (0.00 sec)
>>
>>
>>             My test script inserts a ten character string into the 5
>>             character column:
>>
>>             ==== PHP TEST CODE ====
>>
>>             $pdo = new PDO(
>>                   'mysql:host=localhost;dbname=test',
>>                   'username',
>>                   'password'
>>             );
>>
>>             $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
>>
>>
>>             $retval = $pdo->query( 'INSERT INTO `test` (data) VALUES
>>             ("1234567890")'
>>             );
>>
>>             print_r( $retval );
>>
>>             ==== END TEST CODE ====
>>
>>             This results in a new row in the `test` table, truncated
>>             after the 5th
>>             character as expected, but the truncation is not reported.
>>             (running in
>>             php 5.3.2 and 5.3.4)
>>             Running the same query directly in the mysql command line
>>             shows a
>>             warning as expected.
>>
>>             Am I missing something simple here?
>>
>>             Thanks,
>>             Matt
>>
>>         Caveat: I don't use PDO but maybe the PDO::ERRMODE_WARNING
>>         attribute may do
>>         what you want?
>>
>>
>>
>>         Cheers
>>
>>
>>     Interesting idea. I gave it a try, but got the same result!
>>     I think PDO::ERRMODE_WARNING tells PDO to give PHP warnings versus
>>     throw exceptions when there are problems (if I'm understanding it
>>     properly).
>>
>>     -Matt
>>
>>     --     PHP Database Mailing List (http://www.php.net/)
>>     To unsubscribe, visit: http://www.php.net/unsub.php
>>
>


MySQL will silently truncate it without throwing an error, unless
you've looked into enabling alternate behavior. Set
STRICT_TRANS_TABLES (for InnoDB) or STRICT_ALL_TABLES (for any storage
engine) in MySQL's config and it'll throw the following error instead
of silently truncating data:
[Err] 1406 - Data too long for column '[some column]' at row [XYZ]
Does that help?
-- 

Bastien

Cat, the other other white meat

-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux