如何强制adodb php库使用小写字段名称

时间:2009-06-23 21:34:58

标签: php mysql adodb

我正在尝试在我的webapp中使用adodb进行数据库访问。 但是我的托管服务提供商的mysql区分大小写, 而我的所有字段都是小写的。但是当我调用getInsertSQL函数时, 我把它们用大写字母。

有没有办法强制adodb使用小写?

我试过

define('ADODB_ASSOC_CASE', 0);
$ADODB_ASSOC_CASE = 0;

但它似乎被忽略了,因为常量只能用于oracle,MSSQL和其他DBMS

$conn = &ADONewConnection($this->DbType);
$conn = PConnect($dbServer,$dbUser, $dbPassword,$database);
$tableName = "sample";
$insertSQL = $conn->GetInsertSQL($tableName,$objDB);

我得到的SQL语句的列名大写。

2 个答案:

答案 0 :(得分:0)

开箱即用的adodb不会给你这个选项。我下载了最新版本,它强制GetInsertSQL中的所有列名(对于所有驱动程序)都是大写的。

foreach( $columns as $field ) { 
    $upperfname = strtoupper($field->name);
    if (adodb_key_exists($upperfname,$arrFields,$force)) {
        $bad = false;
        if ((strpos($upperfname,' ') !== false) || ($ADODB_QUOTE_FIELDNAMES))
            $fnameq = $zthis->nameQuote.$upperfname.$zthis->nameQuote;
        else
            $fnameq = $upperfname;
    ...
        // Get the name of the fields to insert
        $fields .= $fnameq . ", ";
    }
}

我还没有测试过,但似乎你可以将最后一行更改为:

$fields .= strtolower($fnameq) . ", ";

请注意,如果您稍后更新到较新版本的adodb,则必须再次进行此更改。由于区分大小写的表名和列名是MySQL中的一个选项,您可能还想向adodb的开发人员建议他们将其添加为选项。

答案 1 :(得分:0)

真的取决于数据库。

对于Oracle,您可以这样做:

define('ADODB_ASSOC_CASE', 0);
$db = NewADOConnection('oci8po');

oci8po应该比正常的oci8慢,但我没有发现差异。它允许使用小写列名称以及“?”绑定参数而不是“:column”