PHP-OCI绑定&;装订问题

PHP-OCI绑定&;装订问题,php,oracle-call-interface,Php,Oracle Call Interface,我有一个PHP数据库应用程序,尝试使用OCI函数绑定和绑定字符串变量时出错。如果绑定大小太大,则值会绑定到错误的数据库字段(没有Oracle、PHP或OCI错误;数据只会出现在错误的列中)。我已经编写了以下代码来确定我可以在使用的每台服务器上使用的最大绑定大小值。这是可行的,但我不明白为什么会有这样的限制。它是否与PHP.INI参数相关?在运行相同PHP和Oracle版本的不同服务器(从1333到4000)上,限制是不同的。我已经查遍了所有我能想到的地方,但找不到答案。我正在运行Zend Stu

我有一个PHP数据库应用程序,尝试使用OCI函数绑定和绑定字符串变量时出错。如果绑定大小太大,则值会绑定到错误的数据库字段(没有Oracle、PHP或OCI错误;数据只会出现在错误的列中)。我已经编写了以下代码来确定我可以在使用的每台服务器上使用的最大绑定大小值。这是可行的,但我不明白为什么会有这样的限制。它是否与PHP.INI参数相关?在运行相同PHP和Oracle版本的不同服务器(从1333到4000)上,限制是不同的。我已经查遍了所有我能想到的地方,但找不到答案。我正在运行Zend Studio 7.2.1和Oracle 11/g。任何帮助都将不胜感激

//  Determine value of MAXBINDSIZE. Note a database connection has already been established in "$conn".
$backupBy = "CAC";
$backupStatus = "Success";
$mx = 8000;//largest reasonable value (for me).
$my = $mx / 2;
$maxBindSize = 1000;//smallest reasonable value (for me).
$i = 0;
while ($my > 1)
{
  $name = "TEST-" . $mx;
  $query = "INSERT INTO DB_INFO (NAME, BACKUP_BY, BACKUP_STATUS)
           VALUES ('{$name}', :BACKUPBY, :BACKUPSTATUS) RETURNING NAME INTO :NAME";
  if ($q = oci_parse($conn, $query))
    if (oci_bind_by_name($q, ":BACKUPBY", $backupBy, $mx))
      if ( oci_bind_by_name($q, ":BACKUPSTATUS", $backupStatus, $mx))
        if ( oci_bind_by_name($q, ":NAME", $name, $mx))
          if (oci_execute($q))
          {
             $query = "select * from db_info where name='{$name}'";//'read back what we just wrote...
             if (($q = oci_parse($conn, $query)) && oci_execute($q)) $row = oci_fetch_array($q);
           }
  if (!isset($row["BACKUP_BY"]) || ($row["BACKUP_BY"] != "{$backupBy}") || ($row["BACKUP_STATUS"] != "{$backupStatus}"))
    $mx = $mx - $my;//no go, reduce max bind size
  else
  {
    $maxBindSize = $mx; //save last successful value.
    $mx = $mx + $my;
  }
  unset($row);
  $my = intval($my / 2);
  $i++;
  if (($mx < 1000) ||($mx > 8000) || ($i > 16)) $my = 0;//paranoia
}
//  Cleanup table, delete bogus entries and save largest successful value for next time.
$query = "delete from db_info where substr(name,1,4) = 'TEST'";
if ($q = oci_parse($conn, $query)) oci_execute($q);
$_SESSION["MAXBINDSIZE"] = $maxBindSize;
//
//确定MAXBINDSIZE的值。注意,“$conn”中已建立数据库连接。
$backupBy=“CAC”;
$backupStatus=“成功”;
$mx=8000//最大合理价值(对我而言)。
$my=$mx/2;
$maxBindSize=1000//最小合理值(对我而言)。
$i=0;
而($my>1)
{
$name=“TEST-”$mx;
$query=“插入数据库信息(名称、备份人、备份状态)
值(“{$name}”,:BACKUPBY,:BACKUPSTATUS)将名称返回到:name”;
如果($q=oci\U解析($conn$query))
if(oci通过名称($q,“:BACKUPBY”、$BACKUPBY,$mx)绑定)
如果(oci_绑定_按名称($q,“:BACKUPSTATUS”,$BACKUPSTATUS,$mx))
如果(oci_按名称($q,“:name”,$name,$mx)绑定)
如果(oci_执行($q))
{
$query=“select*from db_info where name='{$name}'”;//“读回我们刚才写的内容…”。。。
if($q=oci_parse($conn,$query))&&oci_execute($q))$row=oci_fetch_数组($q);
}
如果(!isset($row[“BACKUP_BY”])| |($row[“BACKUP_BY”]!=“{$backupBy}”)| |($row[“BACKUP_STATUS”]!=“{$backupStatus}”))
$mx=$mx-$my;//不可以,减少最大绑定大小
其他的
{
$maxBindSize=$mx;//保存上次成功的值。
$mx=$mx+$my;
}
未结算($行);
$my=intval($my/2);
$i++;
如果($mx<1000)| |($mx>8000)| |($i>16))$my=0;//偏执狂
}
//清理表,删除虚假条目并保存最大成功值以备下次使用。
$query=“从数据库信息中删除,其中substr(名称,1,4)=‘测试’;
如果($q=oci_parse($conn,$query))oci_execute($q);
$\会话[“MAXBINDSIZE”]=$MAXBINDSIZE;
//