0

我正在尝试在我的 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 语句。

4

2 回答 2

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 的开发人员将其添加为选项。

于 2009-06-28T04:13:01.427 回答
0

取决于数据库,真的。

对于 Oracle,您可以执行以下操作:

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

oci8po 应该比普通的 oci8 慢,但我没有注意到有什么不同。它允许小写列名和“?” 绑定参数而不是 ":column"

于 2009-10-27T20:26:51.900 回答