如何从循环键和值数组

时间:2015-10-09 16:44:04

标签: php arrays sqlite pdo

从像POST这样的$uri = explode("&", $_SERVER["QUERY_STRING"]);方法我可以检索插入操作所需的值。我还有一个构造函数,它调用另一个为我的sqlite连接返回PDO的函数:

 private function dbConnect()
{
    try {
        $this->db = new PDO('sqlite:model.sqlite3');
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (PDOException $e) {
        echo $e->getMessage();
    }
    return $this->db;

}

此方法已使用GET进行测试,并且没问题。现在我想通过URI调用插入表新记录:

private function disciplines(){
        // Cross validation if the request method is POST else it will return "Not Acceptable" status
        if($this->get_request_method() != "PUT"){
            $this->response('',406);
        }
        $uri= array();
        //echo "The query string is: ".$_SERVER['QUERY_STRING']; 
        $uri = explode("&", $_SERVER["QUERY_STRING"]);
        if(uri){  

        $sTable= array();
        $sValue= array();
        foreach ($uri as $var_val) {
        $var_val = explode('=', $var_val);
        $var[]= $var_val[0];
        $val[]= $var_val[1];

        }

        array_shift($var);
        array_shift($val);
        //shift arry is for esclude first element on arrays
        $sTable= implode(',', $var);
        $sValue= implode(',', $val);

        print_r(array_values($var));
        print_r(array_values($val));

输出:

 Array //array1
(
    [0] => discipline
    [1] => Material
)
Array // array 2
(
    [0] => sword
    [1] => Iron
)

最后的愿望步骤:

$qry = $this->db->exec(
        'INSERT INTO disciplines ($sTable) VALUES ($sValue)');
        echo $qry;

不起作用!请你能帮我正确的方向吗?任何帮助都很有价值。

我现在得到的是什么:

 echo $qry;
 'INSERT INTO discipline (Array) VALUES (Array)');

我需要什么:

 INSERT INTO disciplines (discipline, material ) VALUES (sword, iron )');

1 个答案:

答案 0 :(得分:0)

只要数组正确验证

<?php

$sql = 'INSERT INTO disciplines ( ' . implode( ',', $arr1 ) . ' ) VALUES ( ' . implode( ',', $arr2 ) . ' )';

?>

但我建议使用带有占位符的预准备语句

<?php

$sql = 'INSERT INTO disciplines ( ' . implode( ',', $arr1 ) . ' ) VALUES ( ' . implode( ',', array_fill( 0, count( $arr2 ), '?' ) ) . ' )';

?>

看看prepare()和exec() http://php.net/manual/en/pdo.prepare.php