已准备好的语句PDO中绑定值的数组PHP

已准备好的语句PDO中绑定值的数组PHP

问题描述:

我试图将我的值绑定到PDO中的预准备语句。已准备好的语句PDO中绑定值的数组PHP

这里是前期必要的代码的使用准备好的语句块:

$tab = 'air_user'; 
$fie = array('USER_NAME', 'USER_PASSWORD' , 'USER_EMAIL'); 
$name = $_POST['name']; 
$pass = $_POST['password']; 
$email = $_POST['email']; 
$val = array(
    'name' => $name, 
    'pass' => $pass, 
    'email' => $email 
); 
$this->connect($tab,$fie,$val); 

这里是部分,其中我准备这些价值观念,使necessaru插入:

public function connect($table,$fields,$values) 
{ 

    try{ 
     $con = new PDO ('mysql:host=localhost;dbname=air','root','123456'); 
     $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

     $fields = implode(", ", $fields); 
     echo $fields; 
     $values = implode(", ", $values); 
     echo $values; 

     // have to make this prevent sql injection // 
     $stmt = $con->prepare("INSERT INTO $table(ID,$fields) VALUES (?,?,?,?)"); 
     $stmt->execute(array('',$values)); 

    } catch(PDOException $e) { 
     die("this cant connect the database"); 
    } 
} 

为什么是否我的INSERT不工作?是否任何人都可以帮助我看看它,我尝试了很多东西,但都没有工作。

不,不要implode,你要去->execute()内传递值,它必须是一个数组:

$fields = implode(", ", $fields); 
// $values = implode(", ", $values); // DONT IMPLODE! 
$values = array_values($values); 

$stmt = $con->prepare("INSERT INTO $table(ID,$fields) VALUES (NULL, ?,?,?)"); 
$stmt->execute($values); 

或@ Augwa的建议:

// $fields = implode(", ", $fields); // not needed 
// $values = implode(", ", $values); // DONT IMPLODE! 

$placeholders = substr(str_repeat('?,', sizeOf($fields)), 0, -1); 
// $placeholders = implode(', ', array_fill(0, count($values), '?')); 

$stmt = $con->prepare(
    sprintf(
     "INSERT INTO %s (%s) VALUES (%s)", 
     $table, 
     implode(',', $fields), 
     $placeholders 
    ) 
); 
$stmt->execute($values); 
+0

幽灵再次胜天! :D – Darren

+0

虽然上面的说法是正确的,但您也可以一起省略ID。 – Augwa

+1

@Darren你可能也发布了同样的想法,只是按下了答案按钮:D – Ghost