意外的SQLite3 Statement :: clear行为

时间:2014-03-14 14:29:40

标签: php sqlite prepare

使用预准备语句为新行绑定较少的值而不是前一行,实际上是从上一行写入数据。

看看这个例子:

$db = new SQLite3('test.sqlite');
$db->exec('CREATE TABLE IF NOT EXISTS test (column1, column2, column3);');

$stmt  = $db->prepare('INSERT INTO test (column1, column2, column3) values (:0, :1, :2)');

$data = array(
  array('a', 'b', 'c'),
  array('a', 'b', 'c'),
  array('x')
);

foreach($data as $row)
{
  foreach($row as $index => $column)
  {
    $stmt->bindValue(':'.$index, $column, SQLITE3_TEXT);
  }
  $stmt->execute();
  $stmt->clear();
}

预期的行为如下表所示:

a|b|c
a|b|c
x||

实际上结果是

a|b|c
a|b|c
x|b|c

如果行为是故意的,我想了解它。 :: clear似乎根本没有明确约束值。

0 个答案:

没有答案