構造sql語句是 比起來
複製代碼 代碼如下:$sql = 'SELECT *
FROM sdb_comments
WHERE goods_id = '.intval($goods_id).'
AND for_comment_id IS NULL
AND object_type = ".$item."
AND disabled="false"
AND display = "true"';
我更喜歡這樣做: 複製代碼 代碼如下:$sql = sprintf('SELECT *
FROM sdb_comments
WHERE goods_id = %.0f
AND for_comment_id IS NULL
AND object_type = "%s"
AND disabled="false"
AND display = "true"', (float)$goods_id, $item);
這個語句還算 簡單,如果是更複雜的話,用拼接字串的話,那簡直就是一個噩夢。
使用第二種方式的話,比較方便.但是一個小問題:在格式化數位時候就需要注意其取值範圍。數字操作了取值反問。那麼最後返回的sql 也不是我們需要的。
我今天做了個總結:
%d: 2^31~2^31-1(-2147483648~2147483647) (將int轉化為有符號十進位)
%b:二進位(將int類型的轉化為二進位)
%c:字元(將int類型轉化為字元)
%u: 2^32-1(0 ~ 4294967295) (將int轉化為有符號十進位)
%f: -2^128-2^128(-3.4E38 ~+3.4E38)(將float轉化為float) 本地化
%F: -2^128-2^128(-3.4E38 ~+3.4E38)(將float轉化為float) 非本地化
%o (將int轉化為八進位)
%s:字串
%x:將int轉化為小寫字母的十六進位
%X:將int轉化為大寫字母的十六進位
因為 資料庫中 id 可能會很大 如果使用%d的話,就可能出現因為超出了範圍,而到不到正確的結果。所以,個人建議 對id進行格式化的時候 使用%.0f 比 %d 要 好的多。