Php 在Oracle中插入值时,如何遍历唯一的变量名?

Php 在Oracle中插入值时,如何遍历唯一的变量名?,php,oracle,oci8,Php,Oracle,Oci8,在我的PHP代码中,我有如下命名/定义的变量: $comment_1 = $_POST["A_comment"]; $comment_2 = $_POST["B_comment"]; $comment_3 = $_POST["C_comment"]; 我尝试使用迭代方法将这些变量的值插入Oracle,以提供每个变量名称末尾使用的数字,如下所示: for($i=1;$i<4;$i++) { $sql2 = "IN

在我的PHP代码中,我有如下命名/定义的变量:

$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);
}

for($i=1;$i$comment_$i)在代码中不是初始化变量的正确方法,这就是它显示错误值的原因。应该这样做。动态变量生成就是用于此的术语

for($i=1;$i<=4;$i++) {
    $variable = ${"comment_" . $i};
    $sql2 = "INSERT INTO i_avail(IA_COMMENTS) VALUES('$variable')";
}

for($i=1;$i使用绑定变量以实现安全性(避免SQL注入攻击)以及性能和可伸缩性

也不要做出超出必要的承诺

尝试:

$numvalues=4;
$comment_1=“A_comment”;
$comment_2=“B_comment”;
$comment_3=“C_comment”;
$comment_4=“D_comment”;
$sql=“插入i_avail(ia_注释)值(:bv)”;
$s=oci_parse($c$sql);
如果(!$s){
$m=oci_错误($c);
触发器_错误('无法分析语句:'.$m['message'],E_用户_错误);
}

对于($i=1;$i谢谢你!这纠正了我的问题。我将记下未来用于此类变量使用的术语。请永远不要在SQL语句Oracle的文本中使用变量替换。使用更安全的绑定变量,这将有助于性能和可伸缩性。例如,检查所有文档等。
$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);
    }

}