处理Oracle数据库的更新查询。所讨论的字段是NCHAR(25)类型的,它接受一个25个字符的UTF-8字节字符串。我的输入值在ASCII中,没有问题。
下面的代码片段使用oci_bind_by_name函数转义WHERE子句中的变量并插入占位符变量:herp中。
$sql = "UPDATE MYTABLE SET OPT = '1' WHERE FIELD = :herp";
$stmt = oci_parse($this->conn, $sql);
oci_bind_by_name($stmt, ":herp", $record['value'], -1, SQLT_CHR);下一个片段不使用oci_bind_by_name函数,而是将该变量插入到SQL语句未转义的 (YOLO)中。
$sql = "UPDATE MYTABLE SET OPT = '1' WHERE FIELD = '".$record['value']."'";
$stmt = oci_parse($this->conn, $sql);我的问题
第一个片段不工作,而第二个片段工作得很好,也就是说,UPDATE语句每次都在第二个方法上成功,而在第一个方法上每次都失败。
两个版本的UPDATE都应该可以工作。但是,当我在几个字段中使用oci_bind_by_name函数时,变量就会发生变化。(我正在对实际代码进行更严格的错误检查)。
我的问题
这里发生什么事情?如何才能仍然使用oci_bind_by_name而不只是将变量直接连接到SQL语句中呢?
发布于 2018-04-03 15:30:31
PHP OCI8或PDO_OCI都不支持NVARCHAR、NCHAR或NCLOB类型。
https://stackoverflow.com/questions/48545109
复制相似问题