我有pdo_oci驱动程序,成功连接到oracle数据库的pdo。我有一个需要双引号的查询,所以我的问题是:为什么pdo_oci :: quote不起作用?
示例:
$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 :: quote()。一切都很好,而我只使用MySQL,但现在我需要oracle。所以,如果我无法弄清楚为什么pdo_oci quote()不起作用,我将不得不改变我自己的一些引用方法,或者覆盖pdo :: quote?虽然我不想这样做。
编辑:因为有些人认为这个例子是理所当然的,我可以给你一个使用mysql并使用正确的quote()用法:
$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 :(得分:-1)
来自mysql示例的不正确引用用法。
这里是一个合适的人:
$sql = 'SELECT modelID FROM statements
WHERE modelID = ?
AND subject = ?
AND predicate = ?
AND object = ?
AND l_language= ?';
也可以使用Oracle的这种模式。