向 Oracle 中插入值时如何遍历唯一变量名?
How can I iterate through unique variable names when inserting values into Oracle?
在我的 PHP 代码中,我有这样的变量 named/defined:
$comment_1 = $_POST["A_comment"];
$comment_2 = $_POST["B_comment"];
$comment_3 = $_POST["C_comment"];
我正在尝试使用迭代方法将这些变量的值插入到 Oracle 中,以提供在每个变量名称末尾使用的数字,如下所示:
for($i=1;$i<4;$i++) {
$sql2 = "INSERT INTO i_avail(IA_COMMENTS) VALUES('$comment_$i')";
$stid2 = oci_parse($connect, $sql2);
$r = oci_execute($stid2);
}
不是从三个 $POST 引用(仅文本)中插入预期值,而是将三个数字插入到 table 中(数字 1,2 和 3)。我猜这是因为找不到 $comment 并使用 $i 作为值。换句话说,它没有像我希望的那样处理变量名。
如何在我的 INSERT 语句中配置变量名,以便它将我的变量名识别为“$comment_1”、“$comment_2”和“$comment_3” ?我需要使用不同的引号,还是需要转义?
$comment_$i 在您的代码中不是初始化变量的正确方法,这就是它显示错误值的原因。这应该可以解决问题。动态变量生成是用于此的术语。
for($i=1;$i<=4;$i++) {
$variable = ${"comment_" . $i};
$sql2 = "INSERT INTO i_avail(IA_COMMENTS) VALUES('$variable')";
}
将绑定变量用于安全性(避免 SQL 注入攻击)以及性能和可伸缩性。
也不要提交不必要的内容。
尝试:
$numvalues = 4;
$comment_1 = "A_comment";
$comment_2 = "B_comment";
$comment_3 = "C_comment";
$comment_4 = "D_comment";
$sql = "INSERT INTO i_avail (ia_comments) VALUES(:bv)";
$s = oci_parse($c, $sql);
if (!$s) {
$m = oci_error($c);
trigger_error('Could not parse statement: '. $m['message'], E_USER_ERROR);
}
for ($i=1; $i<=$numvalues; $i++) {
$variable = ${"comment_" . $i};
$r = oci_bind_by_name($s, ':bv', $variable);
if (!$r) {
$m = oci_error($s);
trigger_error('Could not bind a parameter: '. $m['message'], E_USER_ERROR);
}
// Only commit once after all data has been inserted
$commitmode = $i == $numvalues ? OCI_COMMIT_ON_SUCCESS : OCI_NO_AUTO_COMMIT;
$r = oci_execute($s, $commitmode);
if (!$r) {
$m = oci_error($s);
trigger_error('Could not execute statement: '. $m['message'], E_USER_ERROR);
}
}
在我的 PHP 代码中,我有这样的变量 named/defined:
$comment_1 = $_POST["A_comment"];
$comment_2 = $_POST["B_comment"];
$comment_3 = $_POST["C_comment"];
我正在尝试使用迭代方法将这些变量的值插入到 Oracle 中,以提供在每个变量名称末尾使用的数字,如下所示:
for($i=1;$i<4;$i++) {
$sql2 = "INSERT INTO i_avail(IA_COMMENTS) VALUES('$comment_$i')";
$stid2 = oci_parse($connect, $sql2);
$r = oci_execute($stid2);
}
不是从三个 $POST 引用(仅文本)中插入预期值,而是将三个数字插入到 table 中(数字 1,2 和 3)。我猜这是因为找不到 $comment 并使用 $i 作为值。换句话说,它没有像我希望的那样处理变量名。
如何在我的 INSERT 语句中配置变量名,以便它将我的变量名识别为“$comment_1”、“$comment_2”和“$comment_3” ?我需要使用不同的引号,还是需要转义?
$comment_$i 在您的代码中不是初始化变量的正确方法,这就是它显示错误值的原因。这应该可以解决问题。动态变量生成是用于此的术语。
for($i=1;$i<=4;$i++) {
$variable = ${"comment_" . $i};
$sql2 = "INSERT INTO i_avail(IA_COMMENTS) VALUES('$variable')";
}
将绑定变量用于安全性(避免 SQL 注入攻击)以及性能和可伸缩性。
也不要提交不必要的内容。
尝试:
$numvalues = 4;
$comment_1 = "A_comment";
$comment_2 = "B_comment";
$comment_3 = "C_comment";
$comment_4 = "D_comment";
$sql = "INSERT INTO i_avail (ia_comments) VALUES(:bv)";
$s = oci_parse($c, $sql);
if (!$s) {
$m = oci_error($c);
trigger_error('Could not parse statement: '. $m['message'], E_USER_ERROR);
}
for ($i=1; $i<=$numvalues; $i++) {
$variable = ${"comment_" . $i};
$r = oci_bind_by_name($s, ':bv', $variable);
if (!$r) {
$m = oci_error($s);
trigger_error('Could not bind a parameter: '. $m['message'], E_USER_ERROR);
}
// Only commit once after all data has been inserted
$commitmode = $i == $numvalues ? OCI_COMMIT_ON_SUCCESS : OCI_NO_AUTO_COMMIT;
$r = oci_execute($s, $commitmode);
if (!$r) {
$m = oci_error($s);
trigger_error('Could not execute statement: '. $m['message'], E_USER_ERROR);
}
}