【发布时间】:2011-09-12 04:42:38
【问题描述】:
我正在更新/修改一些数据库代码,我想知道,我应该真正从使用准备好的语句中得到什么。
以这个示例代码为例:
$values = '';
for ($i = 0; $i < $count; $i++) {
$name = mysql_real_escape_string ($list[$i][1]);
$voc = mysql_real_escape_string ($list[$i][3]);
$lev = $list[$it][2];
$lev = is_numeric ($lev)? $lev : 0;
$values .= ($values == '')? "('$name', '$voc', $lev)" : ", ('$name', '$voc', $lev)";
}
if ($values != '') {
$core->query ("INSERT INTO onlineCList (name, voc, lev) VALUES $values;");
}
现在,除了可读性(理智)的明显提升和max_packet_size 不再成为问题的事实之外,当我重新编码以使用准备好的语句时,我是否应该期望性能发生任何变化?我正在远程连接到 MySQL 服务器,我担心发送多个小数据包会比发送一个大数据包慢得多。如果是这样的话,MySQLi/mysqlnd可以缓存这些数据包吗?
另一个例子:
$names = '';
while ($row = mysql_fetch_array ($result, MYSQL_ASSOC)) {
$name = mysql_real_escape_string($row['name']);
$names .= ($names == '') ? "'$name'" : ", '$name'";
}
if ($names != '') {
$core->query ("UPDATE onlineActivity SET online = NULL WHERE name IN ($names) AND online = 1;");
}
如上所述,在重新编码后使用准备好的语句后,我是否应该期待意外?如果 MySQL 服务器必须运行一个带有大 IN 子句的查询,或者多个准备好的带有相等检查的查询 (.. WHERE name = $name AND ..),它对 MySQL 服务器有什么影响吗?
假设所有内容都已正确编入索引。
【问题讨论】:
标签: php mysql web-services