【问题标题】:how to insert a converted array to mysql? (Php)如何将转换后的数组插入mysql? (PHP)
【发布时间】:2010-02-27 01:37:23
【问题描述】:

我已经将一个 json 数据转换为数组,但现在我想将它插入到我的数据库中,我不断得到数组

这里是代码

for ($i = 0; $i <= $checking; $i++) {

  $catid = $ids[$i];
  $catname = $names[$i];
  $catapps = $apps[$i];
  $caturl = $iconurls[$i];

  $query = "INSERT INTO cat VALUES ('".$catid.
  "','".mysql_real_escape_string($catname).
  "','".$catapps.
  "','".mysql_real_escape_string($caturl).
  "')";
  mysql_query($query);
};

【问题讨论】:

  • 后面的问题不用再提我了,谢谢:)

标签: php mysql json


【解决方案1】:

我想建议您使用AdoDB 更好地向 MySQL 中插入/更新数据。当您使用AutoExecute 插入/更新时,AdoDB 会自动转义。这是一个使用示例:

$catid = $ids[$i];
$catname = $names[$i];
$catapps = $apps[$i];
$caturl = $iconurls[$i];
//set table name
$table_name = 'cat';
//set field values
$data = array (
  'catid' => $catid,
  'catname' => $catname,
  'catapps' => $catapps,
  'caturl' => $caturl
);
//do insert
$result = $adodb->AutoExecute($table_name, $data, 'INSERT');

请注意$data数组中使用的key是MySQL中cat表中的列名,所以请根据你数据库中的列名进行调整。

如果你想在mysql列中插入一个数组,那么我建议你在插入的时候使用serialize,然后在获取数据的时候使用unserialize,然后再显示或者处理。

【讨论】:

    【解决方案2】:

    使用 PDO 和准备好的语句来做:

    try {
    
      // connect to the DB
      $dbh = new PDO('mysql:host=localhost;dbname=my_db', 'user', 'password');
    
      // prepare the query : it will be faster and safer
      $query = $dbh - > prepare("INSERT INTO cat VALUES (id, name, app, url) VALUES (:id, :name, :app, :url)");
    
    
      // tell which vars will be used to fill the query
      $query - > bindParam(':id', $catid);
      $query - > bindParam(':name', $catname);
      $query - > bindParam(':app', $catapps);
      $query - > bindParam(':url', $caturl);
    
      // execute your stuff
      for ($i = 0; $i <= $checking; $i++) {
    
        $catid = $ids[$i];
        $catname = $names[$i];
        $catapps = $apps[$i];
        $caturl = $iconurls[$i];
    
        $stmt - > execute();
    
      };
    } catch (PDOException $e) {
      // handle connection errors
    }
    
    $dbh = NULL;
    

    【讨论】:

    • 我不同意这一点,因为它使 到数据库的旅行,而不是如果你在一个语句中组成整个插入,而不是一次旅行。
    【解决方案3】:

    哪一列包含'Array'? 尝试print_rvar_dump$catid$catname$catapps$caturl

    如果您有'Array',可能是因为其中至少有一个是数组。当 php 尝试将 Array 转换为 String 时(例如,将其与字符串连接时),它会转换为字符串 'Array'

    【讨论】:

    • 嘿,当我使用 var_dump 时,我的数据库中什么也没有,当我使用 print_r 时,我只得到 1,1,1,1
    • print_r 和 var_dump,打印他们的论点。你不应该使用 print_r 或 var_dump 的返回值,在这种情况下它只是为了调试目的
    【解决方案4】:

    通过连接值组成一个查询。可见:
    (为了清楚起见,进行了一些重组)

     $query = "INSERT INTO cat VALUES ";
    
     for ($i=0; $i<=$checking; $i++) 
     {
        if ($i > 0)
            $query .= ',';
        $catid = intval($ids[$i]);
        $catname = mysql_real_escape_string($names[$i]);
        $catapps = mysql_real_escape_string($apps[$i]);
        $caturl = mysql_real_escape_string($iconurls[$i]);
        $query .= "($catid, '$catname', '$catapps', '$caturl')";
     }
     mysql_query($query);
    

    【讨论】:

    • -1。建议任何人在 2010 年使用 mysql_stuff_escape 而不是 PDO 并没有帮助。
    • 我不同意。使用 PDO 应该是一种选择,而不是宗教要求。在我的辩护中,我与提交者的原始申请保持一致,并指出了一项重组,这会导致清晰。
    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 2014-04-30
    • 1970-01-01
    • 2011-11-10
    • 2011-04-27
    • 1970-01-01
    • 2016-12-21
    • 2011-08-11
    相关资源
    最近更新 更多