2013-07-02 158 views
0

因此,我创建了一个基本的cms应用程序来尝试和深入学习PDO,但我似乎偶然发现了一个问题。我希望能够使用的功能将数据插入到MySQL数据库,到目前为止,我有这个代码...PHP PDO插入数据库功能问题

public function insert($table, $rows, $values) { 

     $data = $values; 

     $STH = $this->DBH->("INSERT INTO `" . $table . "` (". $rows . ") values (?, ?, ?)"); 

    } 

做值问号代表数据的条数我将进入数据库?如果是这样,我怎么知道将要根据$ data数组输入的数据量? (所有的$值都将以'value,value2,value3'等格式输入)

希望我已经明确了我所要求的内容,我对自己的解释很不好。谢谢。

+0

是的,你需要知道你在插入什么......它不是神奇的。 –

+0

@DanyCaissy说什么。另外,你在你的codesample中调用'$ rows'的东西不是行,而是列或者字段,也许这就是你混淆的根源? – fvu

+0

查看$行中的内容会很有帮助,但除非出现类似'foo,bar,baz'的情况,否则您可能会生成无效的SQL。您的字段数必须与值计数匹配(例如,如果$行是4个字段,则为值指定3个占位符是语法错误)。 –

回答

0

只要你的值是一个数组,你可以用一个随机数的值做一个准备语句。示例(未经测试):

public function insert($table, $rows, $values) { 
    $params = rtrim(", ", str_repeat("?, ", count($values))); 
    try { 
    $stmt = $this->DBH->prepare("INSERT INTO $table ($rows) VALUES ($params)"); 
    for($i = 1; $i <= count($values); $i++) { 
     $stmt->bindValue($i, $values[$i-1]); 
    } 
    $stmt->execute(); 
    return $stmt->fetchAll(PDO::FETCH_ASSOC); 
    } catch(PDOException $e) { 
    echo "Oops... {$e->getMessage()}"; 
    } 
} 

编辑传递只有两个参数($table$data作为关联数组),你可以这样做(未经测试):

public function insert($table, $data) { 
    $keys = array_keys($data); 
    $values = array_values($data); 
    $params = rtrim(", ", str_repeat("?, ", count($values))); 
    try { 
    $stmt = $this->DBH->prepare("INSERT INTO $table (`".implode("`,`", $keys)."`) VALUES ($params)"); 
    $stmt->execute($values); 
    return $stmt->fetchAll(PDO::FETCH_ASSOC); 
    } catch(PDOException $e) { 
    echo "Oops... {$e->getMessage()}"; 
    } 
} 
0

只要你$ data变量是一个数组,您可以在它准备好后将它传递给PDO :: Statement中的execute方法。当问号用于结合,它只是需要在顺序值的非关联数组,你希望他们结合(在你的问号出现在查询的顺序)

public function insert($table, $rows, $values) { 
    $data = $values; 
    $STH = $this->DBH->prepare("INSERT INTO `" . $table . "` (". $rows . ") values (?, ?, ?)"); 
    $STH->execute($data); 
} 

您也可以使用名称绑定:

public function insert($table, $rows, $values) { 
    $data = array(":col1" => $values[0], ":col2" => $values[1], ":col3" => $values[2]); 
    $STH = $this->DBH->prepare("INSERT INTO `" . $table . "` (". $rows . ") values (:col1, :col2, :col3)"); 
    $STH->execute($data); 
}