Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 意外的SQLite3语句::清除行为_Php_Sqlite_Prepare - Fatal编程技术网

Php 意外的SQLite3语句::清除行为

Php 意外的SQLite3语句::清除行为,php,sqlite,prepare,Php,Sqlite,Prepare,使用prepared语句为新行绑定的值少于前一行,实际上是从前一行写入数据 看看这个例子: $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)'

使用prepared语句为新行绑定的值少于前一行,实际上是从前一行写入数据

看看这个例子:

$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似乎根本不清除绑定值。

您必须在
执行之后调用
,但这不会对参数产生任何影响…即使使用$stmt->reset(),结果也是一样的。