Re: Not solved - mysql data truncation does not cause an error to be thrown
| From: | Andrew Blake | Date: | Fri, 09 Nov 2007 09:44:44 +0000 |
| Subject: | Re: Not solved - mysql data truncation does not cause an error to be thrown | ||
| References: | 1 2 3 | Groups: | php.db |
| Request: | Send a blank email to php-db+get-44325@lists.php.net to get a copy of this message | ||
Should i say badly written code to reproduce the problem
here is the code again with the errors
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$db= mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
$dbname = 'andy';
mysql_select_db($dbname);
$insertquery="insert into test values('012345678901234567891')";
$results= mysql_query($insertquery) or die('Error, insert query failed');
print_r($results);
echo "<br>".mysql_errno($db) . ": " . mysql_error($db) . "<br>". mysql_info($db) ;
?>
Andrew Blake wrote:
Hello It seems that the normal mysql_query doesn't error when an sql command forces the server to truncate the data. The mysql server executes the sql and provides a warning but it still executes the sql so allowing php to ignore the fact that there is a warning. You can run another sql command "SHOW COUNT(*) WARNINGS" after your insert command to check if there is a warning and roll back the changes - similar to the java mysql interface. I haven't used mysqli and perhaps this is addressed in that ? Using sqlyog (3rd party mysql gui) to run the sql also provides no warning message but running it on the command line provides the "1 row affected, 1 warning message" With data validation and check this data too large situation should never happen but surely php should pay attention to the warnings too ? code to reproduce the problem --> <?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; *$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');*$dbname = 'andy'; *mysql_select_db($dbname);* insertquery="insert into test values('012345678901234567891')"; $results= mysql_query($insertquery) or die('Error, insert query failed'); print_r($results); echo "<br>".mysql_errno($db) . ": " . mysql_error($db) . "<br>". mysql_info($db) ; ?> [SQL] create database if not existsandy; USEandy; /*Table structure for tabletest*/ DROP TABLE IF EXISTStest; CREATE TABLEtest(testvarchar(20) default NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; [/SQL] I understand that there are ways around this but php should really automatically notify of the warning. Maybe i'm missing something obvious...... Cheers Andy Andrew Blake wrote:I figured it out it was the mysql install not php :-) cheers for your help though :-) Vandegrift, Ken wrote:You may want to check the my.ini setting for the table type you are using and see if there is a setting in there that needs to be enabled. I thought I read once that truncation may happen silently depending on the my.ini setting. Just a thought. Ken Vandegrift Shari's Management Corporation Web Developer/Administrator (Direct) 503-605-4132 kvandegrift@sharis.com -----Original Message----- From: Andrew Blake [mailto:a.blake@har.mrc.ac.uk] Sent: Thursday, November 08, 2007 7:51 AM To: Instruct ICC Cc: php-db@lists.php.net Subject: Re: [PHP-DB] mysql data truncation does not cause an error to be thrown Hiya I could check the length of the field against the entry data and javascript myself out of trouble but i was more worried that there is no error or message when mysql clearly returns one saying i've truncated this yet php ignores it completely. It should fail or know about the truncation at least ! Cheers for your reply though :-) Andy Instruct ICC wrote:theUsing mysql_query if i try to force more data than a field can haveyour input before submitting a query?data is truncated yet no error is throw at all. Is there a way round this ? Cheers AndyThis isn't exactly what you want to hear, but how about validating_________________________________________________________________ Boo! Scare away worms, viruses and so much more! Try Windows LiveOneCare! http://onecare.live.com/standard/en-us/purchase/trial.aspx?s_cid=wl_hotm ailnews