我创建了一个函数,可以动态地将数据插入到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
)
我做错了什么?
注意:我已将代码更新为程序,以便让所有人快速测试它!
答案 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
调用您的域名,并检查它是否仍然重复。