2013-12-16 58 views
-1

我有pdo_oci驅動程序,成功連接到oracle數據庫的pdo連接。我有一個需要雙引號的查詢,所以我的問題是:爲什麼pdo_oci :: quote不起作用?PDO ::報價爲oracle

例子:

$dsn = 'oci:dbname=' . $dbUrl . '/' . $dbName . ';charset=utf8'; 
$options = array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_BOTH, 
      PDO::ATTR_PERSISTENT => false, 
      PDO::ATTR_EMULATE_PREPARES => false); 
$conn = new PDO($dsn,$db_username,$db_password,$options); 
$tmp = 'temp'; 
var_dump('select * from' . $conn->quote($tmp)); 

result: string(13) "select * from" 

我問這是因爲我有幾類,即使用PDO ::引號()。一切都很好,而我只使用MySQL,但現在我需要oracle。所以,如果我不知道爲什麼pdo_oci quote()不工作,我將不得不更改每個用於我自己的某些引用方法,或者重寫pdo :: quote?雖然我不想這樣做。

編輯:因爲有的拿這個例子是理所當然的,我可以給你一個的工作與MySQL和有適當的報價()的用法:

$sql = 'SELECT modelID FROM statements 
      WHERE modelID = ' .$this->modelID .' 
      AND subject =' .$this->dbConn->quote($row[0]) .' 
      AND predicate =' .$this->dbConn->quote($row[1]) .' 
      AND object =' .$this->dbConn->quote($row[2]) .' 
      AND l_language=' .$this->dbConn->quote($row[3]); 

明白我的意思嗎?而這只是我需要更改的許多查詢中的一個,如果我無法使quote()工作。

+0

手冊中提到「並非所有的PDO驅動程序都實現了這種方法」,而Oracle驅動程序是實驗性的(Oracle無法使用它並且社區不活躍)。是否有可能切換到準備好的語句? –

+1

你是否完全明白這個功能的作用?從你發佈的代碼可以看出你沒有。 –

+0

好點...引用一個表名將會破壞查詢。我忽略了這一點。 –

回答

-1

那就是不正確引用mysql示例中的用法。

這裏適當的一個:

$sql = 'SELECT modelID FROM statements 
     WHERE modelID = ? 
     AND subject = ? 
     AND predicate = ? 
     AND object = ? 
     AND l_language= ?'; 

按照這種模式與Oracle爲好。