我正在更新/修改某些数据库代码,我想知道,我应该用什么真的期望使用预准备语句。MySQL准备好的语句与普通查询。收益和损失
拿这个例子代码:
(裸着我,我知道这是丑陋的 - 我自己写的)
$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 PERFORMANCE-WISE中应该使用MySQL语句吗?](http:// stackoverflow.com/questions/2214408/should-i-use-prepared-statements-for-mysql-in-php-performance-wise) – e4c5 2016-04-24 02:14:34