我正在更新/修改某些數據庫代碼,我想知道,我應該用什麼真的期望使用預準備語句。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