2012-01-07 37 views
0

我很快就開始了一個新項目,並將使用編碼標準。我一直在寫SQL語句是這樣的:PHP字符串連接的性能開銷?

$sql = sprintf("INSERT INTO users (name) VALUES ('%s')", $name); 

我想知道是否有使用這些中的一個獲得任何性能:

$sql = "INSERT INTO users (name) VALUES ('".$name."')"; 
$sql = "INSERT INTO users (name) VALUES ('$name')"; 

:這是否性能差異與波動增加更多的「參數」(如第一行代碼)?

謝謝。

+1

什麼是你不使用準備好的語句的藉口? – 2012-01-07 21:30:45

+0

我是新來準備的聲明和思考使用它們是的,雖然 – Tom 2012-01-07 21:32:07

+0

知道你仍然很有趣你是否嘗試過對這些進行基準測試? – Wiseguy 2012-01-07 21:32:35

回答

3

是的,這會提高性能。 sprintf是一個額外的函數調用,您的字符串必須掃描%s,這需要額外的時間。

使用字符串毗連運算的第二個選項(·)是速度快,但第三替代,只是放置在一個字符串的字符串變量是最快的歸因於PHP執行其它優化。

無論如何,在調查PHP如何應對串concatination以及如何進行有趣的是,你永遠不應該建立這樣的SQL查詢,因爲它會打開你的代碼的SQL注入。首先將mysql_real_escape()應用於您的參數或使用預準備語句。

+0

Upvoting爲安全信息。 – 2012-01-07 22:19:27

+0

正是我在找的東西。謝謝! – Tom 2012-01-07 23:30:57

1

我的測試沒有顯示$a $b$a . ' ' . $b更快 - 有時甚至更慢。

但都是微不足道的。如果有三個或更多變量,通常需要sprintf