2015-02-12 39 views
-3

這可能是你們中的一些非常基本的,但我真的似乎無法弄清楚@PHP - 插入可變數據自爆

我想插入$x這一行:(".implode(",",array_keys($data)).")$rid。到$values = implode("','", array_values($data));

代碼:

if(count($data)){ 
    $x = "rid"; 
    $rid=$_SESSION['rid']; 
    $values = implode("','", array_values($data)); 
    mysql_query("insert into appetizer (".implode(",",array_keys($data)).") values ('".$values."')"); 

    if(mysql_insert_id()) return mysql_insert_id(); 
    return 0; 
} 

我怎麼可能做到這一點?

道歉的noob問題:3

+0

究竟是你想怎麼辦? – 2015-02-12 01:24:41

+0

我們不明白你的意思是「插入(變量)到(代碼行)」。你可以備份一下,試着解釋你的目標 - 你想要這個代碼有什麼*效果*,這還沒有發生? – zwol 2015-03-09 18:20:04

回答

2

如果你想要把這些價值觀念,使其成爲一個密鑰對價值和不介意任何順序,按相應的分配給它。

將數值推入數組中,然後爆炸。不需要對內爆字符串進行更改。

if(count($data) > 0){ 
    // key-pair values to be appended 
    $x = "rid"; // the key 
    $rid = $_SESSION['rid']; // the value 

    $data[$x] = $rid; // just assign 

    $values = implode("','", array_values($data)); 
    mysql_query("INSERT INTO appetizer (".implode(",",array_keys($data)).") values ('".$values."')"); 

    return mysql_insert_id(); 
} 

我強烈建議使用更新的API,MySQLi或PDO代替。

if(count($data) > 0){ 
    // key-pair values to be appended 
    $x = "rid"; // the key 
    $rid = $_SESSION['rid']; // the value 

    $data = array_merge(array($x => $rid), $data); 

    $keys = array_keys($data); 
    $values = array_values($data); 

    $sql = 'INSERT INTO appetizer (' . implode(',', $keys) . ') VALUES (' . rtrim(str_repeat('?, ', count($keys)), ', ') . ')'; 

    $db = new PDO('mysql:host=localhost;dbname=database_name', 'username', 'password'); 
    $insert = $db->prepare($sql); 
    $insert->execute($values); 

    return $db->lastInsertId(); 
} 

旁註:如果你想要的ID是第一個,那麼可以使用另一種方法:

$data = array_merge(array($x => $rid), $data); 
+0

如果我想讓這個價值成爲第一個呢? – serendipochi 2015-02-12 01:40:44

+1

@serendipochi許多方式,可以合併或不移位 – Ghost 2015-02-12 01:44:03