我正在尝试在我的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语句的列名大写。
答案 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”