2015-02-12 41 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