Bug #36652 [Com]: Prepared statements killing script

From: Date: Tue, 10 Nov 2020 04:22:33 +0000
Subject: Bug #36652 [Com]: Prepared statements killing script
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-230249@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=36652&edit=1

 ID:                 36652
 Comment by:         dinomarindiaz178 at gmail dot com
 Reported by:        shadda at gmail dot com
 Summary:            Prepared statements killing script
 Status:             Closed
 Type:               Bug
 Package:            PDO related
 Operating System:   Debian 3.1
 PHP Version:        5.1.2
 Block user comment: N
 Private report:     N

 New Comment:

wez@php.net Sir, you save my life 
work for me in postgres PDO with 
$stmt = $db->prepare($sql, array(PDO::ATTR_EMULATE_PREPARES => true));
Thanks


Previous Comments:
------------------------------------------------------------------------
[2006-04-09 08:19:55] wez@php.net

postgres has a particularly poor C API for communicating type information in prepared statements.

You most likely need to add some kind of nasty cast for those statements to work correctly, or
sidestep the issue by preparing your statement using:

$stmt = $db->prepare($sql, array(PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT => true));

or, using the very latest snap:

$stmt = $db->prepare($sql, array(PDO::ATTR_EMULATE_PREPARES => true));

If you can repeat the silent-death of your script, please re-open this bug report.  I'm
assuming that it's fixed because your additional comments have working error information.

------------------------------------------------------------------------
[2006-03-10 00:05:54] shadda at gmail dot com

Excuse the delay; I'm using PDO_PGSQL driver, and yes I've tried the latest snapshot from
snaps.php.net.

I just built it, and tested the code.

Gluttony:/home/shadda/php5.1-200603081930# php -r '

try { 

   $db = new PDO("pgsql:host=localhost;dbname=carbonix", "xoom",
"1914"); 
   $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
   $q = $db->prepare("select ?"); 
   $q->execute( array(1) ); var_dump($q->fetch()); 

} catch (Exception $e) { echo $e->getMessage(); }'

Returns: 

SQLSTATE[42P18]: Indeterminate datatype: 7 ERROR:  could not determine data type of parameter

------------------------------------------------------------------------
[2006-03-08 08:28:12] tony2001@php.net

What driver are you using with PDO ?
Is it PDO_OCI or PDO_MYSQL or something else?
Did you try CVS snapshot from http://snaps.php.net?

------------------------------------------------------------------------
[2006-03-08 06:19:42] shadda at gmail dot com

Description:
------------
Using prepared statements causes my script to die, in two ways depending on how I use them. If I use
bindParam() the script dies silently (no error, no exception thrown, even with PDO::ATTR_ERRMODE set
to ERRMODE_EXCEPTION) and I am unable to output anything (above or below). When I pass the parameter
through PDOStatement::execute(), I receive the following error:

SQLSTATE[42P18]: Indeterminate datatype: 7 ERROR: could not determine data type of parameter $1

Reproduce code:
---------------
<?php
//First Example
$query = $db->prepare("select font_name, path from fonts_list where id = ?");

$query->execute( array($_GET['foo']) );
//Produces error (see above)

//Second example
$query = $db->prepare("Select font_name, path from fonts_list where id = :id");
$query->bindParam(':id', $id);

$id = $_GET['foo'];
$query->execute();

//Kills the script. No Error. Nothing error log.





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



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


Thread (5 messages)

« previous php.bugs (#230249) next »