Using "OCIBindByName($stmt,$bindname,&${"bindval$ci"},-1);" probably gives a warning that call-time pass-by-reference has been deprecated.

The OCIBindByName manual entry at 
http://www.php.net/manual/en/function.ocibindbyname.php
has a user comment from "alexander dot zimmer at gmx dot at" that this doesn't work:

  foreach ($array as $key => $val)
  {
    OCIBindByName($state, $key, $val, -1);
  }

but that this does:

  foreach ($array as $key => $val)
  {
    OCIBindByName($state, $key, $array[$key], -1);
  }

See the entry in the manual page for the explanation.

Chris

Are Pedersen wrote:
> Problem solved!
>
As OCIBindByName is binding to the actual variable, that variable must not be changed.

I modified my script to look like this:
---***---
$ci=0;
foreach ($bindargs as $bindname => $bindvalue){
  ${"bindval$ci"}=$bindvalue;
  OCIBindByName($stmt,$bindname,&${"bindval$ci"},-1);
  $ci++;
}
---***---


Are Pedersen wrote:


I get "ORA-01460: unimplemented or unreasonable conversion requested" when useing bind-sql on Oracle 9i.
I am useing OCI 8.1 client in PHP.


What is wrong? And what does this message mean?

Here is the code:
---***---
$bindarray1=array(':project1'=>$project);
$bindarray1[':userid']=$userid;
$rs = sql_query($qs,$bindarray1);

function sql_query($qs,$bindargs) {
  $stmt = @OCIParse($this->db_sqlhandler, $qs);
  if (!$stmt) {
    return false;
  }
  //bind all the variables
  if (is_array($bindargs)){
    foreach ($bindargs as $bindname => $bindvalue){
      OCIBindByName($stmt,$bindname,&$bindvalue,-1);
    }
  }
  if (@OCIExecute($stmt)) {
    return $stmt;
  }
  $DB_ERROR = OCIError($stmt);
  return $DB_ERROR;
}
---***---

-- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to