2012-09-07 33 views
2

我一直在堵塞這個簡單的腳本,並認爲是時候我嘗試並獲得一些幫助。我正在嘗試使PHP腳本與我的數據庫進行通信。我希望能夠編寫一個包含所有單詞的數組,並將所有單詞替換爲它們。例如:簡單的查找和替換腳本PHP/MySQL

陣列(find_word1,replace_word1,find_word2,replace_word2 ....等)

我還希望能夠指定表查找中,我將手動改變這一點。

我會手動填寫所有單詞,但我想使其成爲動態的,所以如果我的數組長度改變不會中斷。

我已經嘗試了很多事情,這裏是我到目前爲止有:

<?php 

//set up variables and enter your credentials here 
$dbname = "name"; 
$dbhost = "localhost"; 
$dbpass = "password"; 
$dbuser = "user"; 
$tbl_name = "Chairs"; 
//set up your master array! Array goes in this or 
$mstr_array = array(
       "find1", "replace1", 
       "find2", "replace2"); 

//connect to database 
$con = mysql_connect($dbhost, $dbuser, $dbpass) or die('no connection:' . mysql_error()); 
$db = mysql_select_db($dbname) or die ('cant select db: ' . mysql_error()); 

// reteive each column 
$sql = "SHOW COLUMNS FROM `{$tbl_name}`"; 
$res = mysql_query($sql) or die ('could not get columns: ' . mysql_error()); 
$find = 0; 
$replace = 1; 

while ($col = mysql_fetch_array($res)) { 

     $sql = "UPDATE `{$tbl_name}` SET `{$col[0]}` = REPLACE(`{$col[0]}`, '{$mstr_array[$find]}' , '{$mstr_array[$replace]}')"; 
     $find = $find + 2; 
     $replace = $replace + 2; 
} 

?> 

任何幫助將不勝感激!由於

+3

您可能會聽到很多,但您應該使用mysqli_ *或PDO而不是mysql_ *出於安全原因 –

回答

1

的第一件事是跌宕我想到的是,而不是使用:

$mstr_array = array(
       "find1", "replace1", 
       "find2", "replace2"); 

使用:

$mstr_keys = array('find1', 'find2', ....); 
$mstr_values = array('replace1', 'replace2', ....); 

,然後在查詢,你可以簡單地使用:

$count = 0; 
$sql = "UPDATE `{$tbl_name}` SET `{$col[0]}` = REPLACE(`{$col[0]}`, '{$mstr_keys[$count]}' , '{$mstr_values[$count]}')"; 
$count++; 

我希望這就是你要找的東西...

+0

mstr_values應該有替換字。 – ajon

+0

是的,當然。固定:) – Ddorda

+0

謝謝Ddorda,這不是我正在尋找的,但它給了我一個使用您提供的解決方案的好主意。謝謝。 – synergy989

0

有幾個錯誤。 $ col [0]將返回列中的值,而不是列名。如果您使用的是更新這樣的查詢您需要定義列名,不是值作爲設定值,例如:

SET column_name = REPLACE(column_name, ... 

但是,如果你知道列名,也可以將其設置爲可變以下是你所需要的全部:

$column = "chairType"; 
for($i=0;$i<count($mstr_array);$i++){ 
    $find=$mstr_array($i++); 
    $replace = $mstr_array($i); 

    $sql = "UPDATE '{$tbl_name}' SET '{$column}' = REPLACE('{$column}',$find,$replace) 
    $mysql_query($sql) or die(mysql_error()); 
} 

不過要注意,這將取代列匹配$ find的所有行。