2009-10-21

[PHP] 利用 strtr() 做變數(樣版)置換

以前在處理 SQL 指令時都是使用 sprintf() 去做變數替換,但常常會遇到兩個問題。
  1. 先後順序固定缺乏彈性,尤其在多語處理的時候
  2. 變數定義缺乏語意(%s),在維護時難以閱讀不直覺


後來找到 strtr() 這個函數可以執行多個字串的取代,在變數替換時蠻方便的,可以有效的克服上面的問題,當然根據使用上的需求最好還是包裝一下。
<?php
$query = "
    INSERT INTO `system_uesr` 
    SET `Id` = :id,
        `Name` = :name
";

$bind = array(
    ":id" => "'1'", 
    ":name" => "'jax'"
);


echo strtr($query, $bind);
// 結果:
//    INSERT INTO `system_uesr` 
//    SET `Id` = '1',
//        `Name` = 'jax' 



參考文章:
PHP: strtr - Manual
PHP strtr() 函数
strtr --- 轉換某些字元

2 回應:

匿名 提到...

請問echo strtr($query, $trans);
裡的$trans是怎麼來的?
您的意思是要說echo strtr($query, $bind);嗎?

胡忠晞 Jax 提到...

抱歉!筆誤!