ID:               43130
 Updated by:       [EMAIL PROTECTED]
 Reported By:      joel at purerave dot com
-Status:           Closed
+Status:           Wont fix
 Bug Type:         PDO related
 Operating System: Windows XP Home
 PHP Version:      5.2.4
 Assigned To:      iliaa
 New Comment:

The fix for this bug that went into CVS on 29th Oct was reverted on
26th Nov following advice from various database experts.

See http://news.php.net/php.cvs/46848,
http://news.php.net/php.cvs/47302 and anything else on that thread for
details.


Previous Comments:
------------------------------------------------------------------------

[2007-10-30 09:51:43] [EMAIL PROTECTED]

I disagree with the decision to allow "-" in parameter names. Parameter
names should consist of [a-zA-Z] and nothing else. "-" is an operator in
most databases. 

For BC compatibility I'm also fine with the old pattern
[:][a-zA-Z0-9_]+ . Though I must say, that I'd prefer
[:][a-zA-Z]+[a-zA-Z0-9_]+, don't allow ":0". ":0" looks a bit like
"operator" + "number"...

However, the underlying problem here is that there is absolutely no
specification for PDO. This makes PDO a guessing game and error prone.

------------------------------------------------------------------------

[2007-10-29 22:37:51] [EMAIL PROTECTED]

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.



------------------------------------------------------------------------

[2007-10-29 18:07:00] joel at purerave dot com

Description:
------------
Parameters to bind in a prepared statement cannot contain dashes (-) in
the name. It probably assumes that "-value" should be another variable.

If this cannot be fixed, then at least update the documentation to make
it clear what names can and cannot be used. Using {} around the variable
name would be nice too!

Reproduce code:
---------------
$db = new PDO("mysql:host=localhost;dbname=testing", 'xxxx', 'xxxx');
$stmt = $db->prepare("SELECT id FROM testing WHERE id=:id-value");
$stmt->bindParam(':id-value', $id);
$id = 1;
$stmt->execute();
var_dump($stmt->fetch());

Expected result:
----------------
array(2) { ["id"]=>  string(1) "1" [0]=>  string(1) "1" }

Actual result:
--------------
Warning: PDOStatement::execute() [function.PDOStatement-execute]:
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in
C:\htdocs\test.php on line 8
bool(false)


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=43130&edit=1

Reply via email to