2014-02-28 21 views
0

我有這樣的代碼:變量是空當的foreach完成

function composeInsertSql($insertData) 
    { 
    $columns = ''; 
    $values = ''; 
    foreach($insertData as $data) 
    { 
     $columns .= $data[0].', '; 
     if($data[2] == 1) 
     { 
     $values .= '"'.$data[1].'", '; 
     } 
     else if($data[2] == 2) 
     { 
     $values .= $data[1].', '; 
     } 
     else if($data[2] == 3) 
     { 
     $values .= 'md5("'.$data[1].'"), '; 
     } 
     else 
     { 
     return false; 
     } 
    } 
    $result['columns'] = rtrim($columns, ', '); 
    $result['values'] = rtrim($values, ', '); 
    return $result; 
    } 

的代碼工作正常時,它是一個獨立的功能,而是一個類裏面不起作用。 當它在類中時,foreach結束時變量「values」和「columns」是空的。在foreach裏面我使用echo,我可以看到它們的值,但是當它完成時,它們是空的。

爲該類函數的調用時的另一類功能在同一個類:

function genericInsert($table, $insertData) 
    { 
    $sqlData = self::composeInsertSql($insertData); 
    $columns = $sqlData['columns']; 
    $values = $sqlData['values']; 
    $sqlInsert = 'INSERT INTO '.$table.' ('.$columns.') values ('.$values.')'; 

    echo "$sqlInsert\n"; // borrar y descomentar las siguientes lineas. 

這兩個功能都在相同的類。此功能的呼叫是:

$db = new DB(); 
$dblink = $db->connect(); 

$insertData = array(
    array('paypal_id', '161411002', '2'), 
    array('name', 'Marco', '1'), 
    array('mail', '[email protected]', '1'), 
    array('product_id', '1', '2'), 
    array('profile_id', '1', '2'), 
    array('insert_time', 'now()', '2'), 
    array('state', '1', '0') 
); 

$db->genericInsert('user_client2', $insertData); 
+0

您最後一個數組的第三個值爲'0',並且在您的函數中,您的值等於'1','2'和'3'的條件。你'else'條件結束你的函數返回'false'。 – DontVoteMeDown

回答

0

我認爲你在這裏有一個邏輯問題。在您$insertData最後array是:

$insertData = array(
    array('state', '1', '0') <-- note the third item value is 0 
); 

而且你的函數裏面你具備這些條件:

if($data[2] == 1) 
else if($data[2] == 2) 
else if($data[2] == 3) 
else 
{ 
    return false; 
} 

請注意,如果您$data[2](數組的第三個值)不123你的函數將返回false

這可能會破壞你的邏輯。嘗試將0更改爲2,看到它不會在您的查詢中添加引號,第二項是值number

+0

你是寫:)謝謝! – user3364621