Ali*_*xel 2 php database sqlite pdo
我的代码看起来像这样:
// Connect to SQLite DB
DB('/path/to/sqlite.db');
DB('BEGIN TRANSACTION;');
// These loops are just examples.
for ($i = 1; $i <= 10000; $i++)
{
for ($j = 1; $j <= 100; $j++)
{
DB('INSERT INTO "test" ("id", "name") VALUES (?, ?);', $i, 'Testing ' . $j);
}
}
DB('END TRANSACTION;');
Run Code Online (Sandbox Code Playgroud)
这是DB()函数:
function DB($query)
{
static $db = null;
if (is_file($query) === true)
{
$db = new PDO('sqlite:' . $query, null, null, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}
else if (is_a($db, 'PDO') === true)
{
$result = $db->prepare($query);
if (is_a($result, 'PDOStatement') === true)
{
if ($result->execute(array_slice(func_get_args(), 1)) === true)
{
if (stripos($query, 'INSERT') === 0)
{
return $db->lastInsertId();
}
if (stripos($query, 'SELECT') === 0)
{
return $result->fetchAll(PDO::FETCH_ASSOC);
}
return $result->rowCount();
}
}
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
问题是内部循环中的DB()调用需要很长时间才能完成,我认为做这样的事情会大大加快执行速度:
DB('BEGIN TRANSACTION;');
for ($i = 1; $i <= 10000; $i++)
{
$queries = array();
for ($j = 1; $j <= 100; $j++)
{
$queries[] = 'INSERT INTO "test" ("id", "name") VALUES (?, ?);' /*, $i, 'Testing ' . $j;*/
}
DB(implode("\n", $queries));
}
DB('END TRANSACTION;');
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何使用相应的变量准备(替换和转义)所有问号,有什么方法可以实现这一点吗?
如果你在循环中"准备"它们,为什么要使用预准备语句?(在DB功能中)
为循环做好准备,在循环中只给出值并执行.当然这需要重写DB方法.
哦,顺便说一下.你的ID列是主键吗?如果是这样你有另一个问题,那么"我"将是100"j"相同:)
例如:
$sth = $dbh->prepare('INSERT INTO "test" ("id", "name") VALUES (:id, :name)');
$j=0;
for ($i = 1; $i <= 10000; $i++){
$j = ($j==100) ? 0 : $j++;
$sth->execute(array(':id' => $i, ':name' => 'Testing ' . $j));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2053 次 |
| 最近记录: |