|   | php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
| 
  [2006-08-22 15:00 UTC] selecter at gmail dot com
 Description:
------------
The code below leads to unclear error Fatal error: : in /var/www/localhost/htdocs/crash.php on line 33
But if I pass int values instead of bool, this code works fine.
Instead of:
'show_email' => (bool) 1,
'show_smiles' => (bool) 1,
Write:
'show_email' => 1,
'show_smiles' => 1,
I noticed that because I get those values like this:
'show_email' => CheckBox::isOn('show_email'),
'show_smiles' => CheckBox::isOn('show_smiles'),
which return bool values...
Reproduce code:
---------------
<?php
try{
    $dsn = 'mysql:host=localhost;dbname=test';
    $db = new PDO($dsn, 'root', 'pass');
}catch(PDOException $e){
	trigger_error($e->getMessage(), E_USER_ERROR);
}
$prefs = array(
            	'show_email' => (bool) 1,
            	'show_smiles' => (bool) 1,
            	'timezone_offset' => 0,
            	'messages_on_page' => 5,
            	'uid', 6
);
    		$st = $db->prepare("UPDATE preferences SET show_email=?, show_smiles=?, timezone_offset=?, messages_on_page=? WHERE uid=?");
		$st->bindParam(1, $prefs['show_email'], PDO::PARAM_BOOL);
        $st->bindParam(2, $prefs['show_smiles'], PDO::PARAM_BOOL);
        $st->bindParam(3, $prefs['timezone_offset'], PDO::PARAM_INT);
        $st->bindParam(4, $prefs['messages_on_page'], PDO::PARAM_INT);
			$id = 6;
        $st->bindParam(5, $id, PDO::PARAM_INT);    	
    	if(($num=$st->execute()) === FALSE){
      	$einfo = $db->errorInfo();
        $einfo = $db->errorCode.': '.$einfo[2];
			?><pre><?php        
        debug_print_backtrace();
        ?></pre><?php      
        trigger_error($einfo, E_USER_ERROR);
    	}else{
        	echo 'ok';
        }
?>
PatchesPull Requests
Pull requests: HistoryAllCommentsChangesGit/SVN commits             | |||||||||||||||||||||||||||||||||||||
|  Copyright © 2001-2025 The PHP Group All rights reserved. | Last updated: Fri Oct 31 07:00:01 2025 UTC | 
Still reproducable. Here's the code: <?php try{ $dsn = 'mysql:host=localhost;dbname=test'; $db = new PDO($dsn, 'root', 'pass'); }catch(PDOException $e){ trigger_error($e->getMessage(), E_USER_ERROR); } $prefs = array( 'show_email' => (bool) 1, 'show_smiles' => (bool) 1, 'timezone_offset' => 0, 'messages_on_page' => 5, 'uid', 6 ); $query = "CREATE TABLE prefs( uid MEDIUMINT UNSIGNED NOT NULL, show_email BOOL NOT NULL, show_smiles BOOL NOT NULL, timezone_offset TINYINT NOT NULL, messages_on_page TINYINT UNSIGNED NOT NULL )"; $query = "INSERT INTO prefs VALUES(6, 1, 1, 0, 5)"; $db->exec($query); $st = $db->prepare("UPDATE prefs SET show_email=?, show_smiles=?, timezone_offset=?, messages_on_page=? WHERE uid=?"); $st->bindParam(1, $prefs['show_email'], PDO::PARAM_BOOL); $st->bindParam(2, $prefs['show_smiles'], PDO::PARAM_BOOL); $st->bindParam(3, $prefs['timezone_offset'], PDO::PARAM_INT); $st->bindParam(4, $prefs['messages_on_page'], PDO::PARAM_INT); $id = 6; $st->bindParam(5, $id, PDO::PARAM_INT); if(($num=$st->execute()) === FALSE){ $einfo = $db->errorInfo(); $einfo = $db->errorCode.': '.$einfo[2]; ?><pre><?php debug_print_backtrace(); ?></pre><?php trigger_error($einfo, E_USER_ERROR); }else{ echo 'ok'; } ?>I get: --- array(1) { [0]=> string(5) "00000" } Notice: Undefined property: PDO::$errorCode in /tmp/1.php on line 62 Notice: Undefined offset: 2 in /tmp/1.php on line 62 <pre></pre> Fatal error: : in /tmp/1.php on line 66 --- No crashes. valgrind doesn't show anything wrong there.Suggestion for workaround (works with PHP 5.1.6 and MySql 4.1.1): $tmp = (int) $this->getDue_Date_IsWeek(); $stmt->bindParam(':Due_Date_IsWeek' , $tmp , PDO::PARAM_BOOL );