1

我试图找到另一个问题的答案,但我没有运气。我的问题基本上是……这行得通吗?

$insert_tweets = "INSERT INTO tweets (
  'id',
  'created_at',
  'from_user_id',
  'profile_image',
  'from_user',
  'from_user_name',
  'text' 
  ) VALUES (
  {$user_data[$i]["id"]},
  {$user_data[$i]["created_at"]},
  {$user_data[$i]["from_user_id"]},
  {$user_data[$i]["profile_image"]},
  {$user_data[$i]["from_user"]},
  {$user_data[$i]["from_user_name"]},
  {$user_data[$i]["text"]}
)"

        for($i=0;$i<count($user_data);$i++){
            mysqli_query($mysqli,$insert_tweets);
        }

$user_data 是一个多维数组,第一层是数字,后一层是关联的。

此外,在插入之前“数据库准备”/清理关联数组变量的最佳方法是什么?我预计不会出现任何恶意数据,但它总是有可能的。

4

3 回答 3

3
        for($i=0;$i<count($user_data);$i++){
            $insert_tweets = "INSERT INTO tweets ('id','created_at','from_user_id','profile_image','from_user','from_user_name','text') VALUES ({$user_data[$i]["id"]},{$user_data[$i]["created_at"]},{$user_data[$i]["from_user_id"]},{$user_data[$i]["profile_image"]},{$user_data[$i]["from_user"]},{$user_data[$i]["from_user_name"]},{$user_data[$i]["text"]})";
            mysqli_query($mysqli,$insert_tweets);
        }

这应该工作

于 2012-07-27T02:47:14.303 回答
3

是的,它会起作用,但最好的方法是使用 PDO。

您可以在您的准备语句中创建无名参数,然后只需传入一个数组以将值绑定到这些参数。

$data = array('val1', 'val2');
$query = $db->prepare("INSERT INTO table (col1, col2) VALUES (? , ?)");
$query->execute($data);

PDO 将为您转义输入值。

这是关于 PDO 的教程,可帮助您入门 http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

于 2012-07-27T02:51:31.353 回答
1

这是我对阵列消毒的建议:

我所做的是创建一个用于清理数据的基本功能:

function array_sanitize(&$item){
    $item = mysql_real_escape_string($item);
}

然后你可以使用array_walk()你的新函数来清理你的数组。(php手册参考

并通过像这样传入您的数组进行消毒:

array_walk($user_data, 'array_sanitize');
于 2012-07-27T03:12:56.960 回答