PHP动态插入函数正在插入重复的行

时间:2017-08-18 14:59:43

标签: php mysql

我创建了一个函数,可以动态地将数据插入到MYSQL数据库中,以避免代码重复:

function insert($table, $data)
{ 
   // connection
   global $db;

    if(!is_array($data)) die("Error : second parameter must be an array of keys and values");

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

    // sql query
    $sql = "INSERT INTO `$table` (";

   // if more than one column
    if(count($data) > 1)
    {
         for($i = 0; $i < count($data) -1; $i++)
         {
            $sql .= "`$keys[$i]`, ";
         }

         $sql .= "`" . end($keys) . "`) VALUES (";

         for($i = 0; $i < count($data) -1; $i++)
         {
            $sql .= ":$keys[$i], ";
         }

        $sql .=":" . end($keys) . ")";

    }else{ // only one column

        $sql .= "`$keys[0]`) VALUES(:$keys[0])";
    }

    // make keys as named placeholders
    $binds = array_map(function($elem){
        return ":".$elem;
    }, $keys);


    // combine placeholders with values
    $binds = array_combine($binds, $values);


    $stmt = $db->prepare($sql);
    return $stmt->execute($binds) ? true : false;
}

所以稍后我可以像这样插入数据:

echo insert("users",[
    "Name"  => "Timino",
    "Email" => "admin@timino.io"
]); // result 1 inserted or 0 failed

然而它插入重复行? 当我调试代码时,一切看起来都没问题

echo $sql;  //INSERT INTO `users` (`Name`, `Email`) VALUES (:Name, :Email)
print_r($binds) // Array
(
    [:Name] => Timino
    [:Email] => admin@timino.io
) 

我做错了什么?

注意:我已将代码更新为程序,以便让所有人快速测试它!

1 个答案:

答案 0 :(得分:1)

您是否在index.php

中执行此代码
echo $db->insert("users",[
    "Name"  => "Timino",
    "Email" => "admin@timino.io"
]); // result 1 inserted or 0 failed

这可能不是代码问题。

我在index.php测试插入内容时出现了类似的问题,我的.htaccess中有一条将未找到的文件重定向到index.php的规则。当浏览器尝试找到您的favicon时,它会重定向到index.php,这将再次执行代码。

如果是这种情况,您可以尝试将代码移到另一个文件test.php并使用http://localhost/test.php调用您的域名,并检查它是否仍然重复。