PDO bindParam, использующий массив, не работает, как предполагалось

У меня есть следующий код …

$statement = $conn->prepare("insert into logtest (course, date, time, distance,
actualstarttime, finishtime, fav, favtotalmatched, favwma, 2ndfav,
2ndfavtotalmatched, 2ndfavwma, 3rdfav, 3rdfavtotalmatched, 3rdfavwma,
orangeflag, greenflag, betplaced, totalracetime, numcalculations,
secswaitedbeforemonitoring, monitorstarttime, totalmonitoringtime)
values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);");

for($i = 0; $i < 23; $i++){
$statement->bindParam($i + 1, $record[$i]);
}

$recordsprocessed = 0;

$line = fgets($file); // Do this once before the loop to go past
// the column headers line

while (!feof($file)){
$line = fgets($file);
$record = explode(",", $line);
print_r($record);
$statement->execute();
++$recordsprocessed;
}

echo "<p>Import finished.  $recordsprocessed records imported.</p>";

Код заполняет базу данных нулями. Я не могу понять почему. Я использовал print_r чтобы убедиться, что $record Массив содержит значения.

Со страницы http://php.net/manual/en/pdo.prepared-statements.php подразумевается, что параметры могут быть связаны с переменными до того, как эти переменные содержат значения, поэтому я предположил, что могу связать с элементами $record а затем заполните эти значения в цикле позже.

Что я делаю неправильно? Или bindParam просто не работает с массивами?

0

Решение

В качестве альтернативы, вы можете просто получить эти значения в строке, а затем просто добавить эти партии через ->execute()

$query = 'INSERT INTO logtest
(course,date,time,distance,actualstarttime,finishtime,fav,favtotalmatched,favwma,2ndfav,2ndfavtotalmatched,2ndfavwma,3rdfav,3rdfavtotalmatched,3rdfavwma,
orangeflag,greenflag,betplaced,totalracetime,numcalculations,secswaitedbeforemonitoring,monitorstarttime,totalmonitoringtime)
values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
';
$statement = $conn->prepare($query);

$recordsprocessed = 0;
$line = fgets($file);  // do this once before the loop to go past the column headers line
while (!feof($file)){

$line = fgets($file);

$record = explode(",",$line);

$statement->execute($record);

++$recordsprocessed;
}

echo "<p>Import finished.  $recordsprocessed records imported.</p>";
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]