Динамическое количество bindParam - PullRequest
0 голосов
/ 20 января 2019

Итак, я пытаюсь выполнить неопределенное количество вызовов bindParam в пределах foreach, но по какой-то причине это не удается. Я знаю, что переменная $ sql работает нормально, но я почти уверен, что она не работает в bindParam. Есть ли причина для этого?

$sql = "INSERT INTO " . $row1["rand"] . " (" . $areas . ") VALUES (" . $vals . ")";
echo $sql;
$entry2 = $conn->prepare("'".$sql."'");
//echo "swag";
foreach($splitHeader as $element){
    if(strlen($element)>0) {
        $thisVal = "':" . $element . "'";
        $entry2->bindParam($thisVal,$_POST[$element]);
    }
}
$entry2->execute();

1 Ответ

0 голосов
/ 20 января 2019

Количество параметров, которые вы определяете в запросе, должно соответствовать количеству параметров, которые вы связываете.

Вам потребуется дважды зациклить свои данные: один раз для динамического построения оператора sql (что вы можете затем prepare), а затем второй раз для привязки параметров, прежде чем наконец вызвать execute.

Вот адаптация вашего кода, демонстрирующая принцип:

$cols = "";
$vals = "";
foreach( $splitHeader as $element ) {
    if( strlen($element) > 0 ) {
        if ( strlen($cols) > 0 ) {
            $cols .= ", ";
            $vals .= ", ";
        }
        $cols .= $element;
        $vals .= "?";
    }
}

$sql = "INSERT INTO " . $row1["rand"] . " (". $cols . ") VALUES(". $vals . ")";
echo $sql;
$sth = $conn->prepare($sql);

$i = 1;
foreach($splitHeader as $element){
    if( strlen($element) > 0 ) {
        $sth->bindParam( $i, $_POST[$element] );
        $i++;
    }
}

$sth->execute();
...