我想在我的数据库中添加一个数组。我已经设置了一个函数来检查db(例如health
和money
)中的值是否已更改。如果该值与原始值不同,我将新值添加到$db
数组。像这样$db['money'] = $money_input + $money_db;
。
function modify_user_info($conn, $money_input, $health_input){
(...)
if ($result = $conn->query($query)) {
while ($user = $result->fetch_assoc()) {
$money_db = $user["money"];
$health_db = $user["health"];
}
$result->close();
//lag array til db med kolonnene som skal fylles ut som keys i array
if ($user["money"] != $money_input){
$db['money'] = $money_input + $money_db;
//0 - 20
if (!preg_match("/^[[0-9]{0,20}$/i", $db['money'])){
echo "error";
return false;
}
}
if ($user["health"] != $health_input){
$db['health'] = $health_input + $health_db;
//0 - 4
if (!preg_match("/^[[0-9]{0,4}$/i", $db['health'])){
echo "error";
return false;
}
if (($db['health'] < 1) or ($db['health'] > 1000))
{
echo "error";
return false;
}
}
$db
中的键代表我数据库中的列。现在我想创建一个函数,它接受数组$db
中的键并将它们插入到db中。像这样的东西?
$query = "INSERT INTO `main_log` ( `id` , ";
foreach(range(0, x) as $num) {
$query .= array_key.", ";
}
$query = substr($query, 0, -3);
$query .= " VALUES ('', ";
foreach(range(0, x) as $num) {
$query .= array_value.", ";
}
$query = substr($query, 0, -3);
$query .= ")";
答案 0 :(得分:1)
如果id
字段已设置为自动递增值,则无需在INSERT命令中声明它(它只是假设未被覆盖,并将填充自动递增的值)。
假设$db
是一个关联数组,其中元素键与SQL字段名称相同,元素值是这些SQL字段的所需值。
# Sanitise the Array
$db = array_map( 'mysql_real_escape_string' , $db )
# Create the SQL Query
$query = 'INSERT INTO `main_log` '.
'( `'.implode( '` , `' , array_keys( $db ) ).'` ) '.
'VALUES '.
'( "'.implode( '" , "' , $db ).'" )';
这应该产生一个SQL查询,它将执行所需的工作。此外,它应该减少SQL注入攻击的可能性......
(注意:上面的换行符等仅供参考,可以删除。)