处理Oracle数据库的UPDATE查询。相关字段的类型为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语句中?