ID: 26734 Updated by: [EMAIL PROTECTED] Reported By: red at ixney dot net -Status: Open +Status: Verified -Bug Type: MySQL related +Bug Type: Scripting Engine problem -Operating System: Win XP Pro +Operating System: Irrelevant -PHP Version: 4.3.2 +PHP Version: 4.3.4 New Comment:
Nothing to do with Mysql, but more like a parser problem <?php $handle1 = fopen("test.php", "r") or die("fopen failed"); $handle2 = fopen("test.php", "r") || die("fopen failed"); var_dump($handle1, $handle2); // yields resource(stream) / bool(true) ?> Apparently || casts the resource to bool (true) and assigns it to the variable. IMHO the || should either produce a parse error in this context or behave like 'or'. Previous Comments: ------------------------------------------------------------------------ [2003-12-28 18:11:51] red at ixney dot net Description: ------------ I always thought '||' and 'or' was the same. Combined with a mysql_query() however, they are not. These lines are the same: mysql_query("$var") or die("help!"); mysql_query("$var") || die("help!"); where $var is a DROP, INSERT or CREATE query, but they are *not* the same if $var is a SELECT query; the returned value will not be a 'Resource ID' in the latter line. Reproduce code: --------------- mysql_query("DROP TABLE IF EXISTS foobar") || die('Cannot drop table'); mysql_query("CREATE TABLE IF NOT EXISTS foobar (foo INT NOT NULL AUTO_INCREMENT, bar TINYINT(1), PRIMARY KEY (foo))") || die('Cannot make table'); // Let's insert some random stuff mysql_query("INSERT INTO foobar (bar) VALUES (0)") || die('Cannot add values 1'); mysql_query("INSERT INTO foobar (bar) VALUES (1)") || die('Cannot add values 2'); mysql_query("INSERT INTO foobar (bar) VALUES (0)") or die('Cannot add values 3'); mysql_query("INSERT INTO foobar (bar) VALUES (1)") or die('Cannot add values 4'); $handle1 = mysql_query("SELECT * FROM foobar WHERE 1") || die('Cannot select'); $handle2 = mysql_query("SELECT * FROM foobar WHERE 1") or die('Cannot select'); echo '$handle1 is '.$handle1.'<br><br>'; echo '$handle2 is '.$handle2.'<br><br>'; Expected result: ---------------- $handle1 is Resource id #2 $handle2 is Resource id #3 Actual result: -------------- $handle1 is 1 $handle2 is Resource id #3 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=26734&edit=1