【问题标题】:PHP foreach insert statement issue with arrays数组的PHP foreach插入语句问题
【发布时间】:2011-08-01 23:27:13
【问题描述】:

大家好,我正在学习php,我需要这样做

  $connection = mysql_open();
  $likes= array();
  foreach($likes as $like)
  {

  $insert3 = "insert into ProfileInterests " .
    "values ('$id', '$like', null)";
  $result3 = @ mysql_query ($insert3, $connection)
    or showerror();

  }
  mysql_close($connection)
    or showerror();

由于某种原因,这不起作用 =/ 我不知道为什么。 $likes 是一个用户输入的数组。我需要它多次插入到表中,直到数组中的所有东西都在里面。

编辑我修复了我在 foreach 循环中关闭它的问题。 mysql_open 是我自己的函数。

有什么想法吗?

【问题讨论】:

  • 反引号 ("`") 用于内联代码。对于代码块,缩进行额外的四个空格,以保留空白并为代码着色。编辑器工具栏中的“{}”按钮会为您执行此操作。编辑您的问题并尝试一下。单击编辑器工具栏中的橙色问号以获取有关格式设置的更多信息和提示。
  • “这不起作用”几乎什么也没告诉我们。你期望会发生什么?实际发生了什么(包括任何错误消息)?
  • 另外,mysql 扩展非常过时,已经被替换了两次;相反,请使用PDO。如果您需要教程,请尝试"Writing MySQL Scripts with PHP and PDO"。 PDO 支持的一项非常重要的功能是prepared statements。使用 mysql_*,如果您将用户输入直接插入到查询中,您的网站很容易受到 SQL injection 的攻击,但准备好的语句参数不易受到注入攻击。

标签: php mysql sql arrays loops


【解决方案1】:

对于一个 $likes 在您的示例中是一个空数组,我假设您在运行的代码中修复它。

第二个是您在循环运行时第一次关闭 MySQL 连接,这将阻止后续 MySQL 查询运行。

【讨论】:

  • 我这样做了,但现在仍然无法正常工作 :( 请查看主要问题,我正在输入固定版本。
【解决方案2】:

没有mysql_open这样的功能

你可能需要mysql_connect

$likes 变量也为空。所以不会执行 foreach 迭代。

【讨论】:

  • 这是我自己的函数:P 变量不是空的,我之前定义过。
  • ahhhhh 我看到这是 1 个问题我做了这个 $likes= array($likes);虽然喜欢应该已经是一个数组,但是当我不这样做时 $likes = array();我得到一个错误。这是警告:在第 50 行的____中为 foreach() 提供的参数无效注意:未定义的变量:第 52 行的____中的错误
【解决方案3】:

您在foreach 循环内关闭连接。

【讨论】:

    【解决方案4】:

    这是插入数据的正确格式代码...您可以使用它。

    // 数据库连接

    $conn=mysql_connect(HOST,USER,PASS);
    $link=mysql_select_db(DATABASE_NAME,$conn);
    

    // 插入数据的函数 ..这里 $tableName 是表名和 $valuesArray 用户输入数组

    function insertData($tableName,$valuesArray) {
    
            $sqlInsert="";
            $sqlValues="";
    
            $arrayKeys = array_keys($valuesArray);
            for($i=0;$i < count($arrayKeys);$i++)
            {
                $sqlInsert .= $arrayKeys[$i].",";
                $sqlValues .= '"'.$valuesArray[$arrayKeys[$i]].'",';
            }
    
            if($sqlInsert != "")
            {
                $sqlInsert = substr($sqlInsert,0,strlen($sqlInsert)-1);
                $sqlValues = substr($sqlValues,0,strlen($sqlValues)-1);
            }
    
            $sSql = "INSERT INTO $tableName ($sqlInsert) VALUES ($sqlValues)";  
            $inser_general_result=mysql_query($sSql) or die(mysql_error());
            $lastID=mysql_insert_id();
            $_false="0";
            $_true="1";
            if(mysql_affected_rows()=='0')
            {
                return $_false;
            }
            else
            {
                return $lastID;
            }
        }
    

    // 函数结束

    【讨论】:

      【解决方案5】:

      虽然许多 PHP 新手(包括我自己)开始使用来自优秀 ole'mysql_connect/query/etc. 的数据库,但我不禁建议您查看PDO,PHP 数据对象。根据您的先前知识和编程背景,可能会有更陡峭的学习曲线。但是,它更强大、更可扩展等;我现在在所有生产代码数据库中使用PDO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-21
        • 1970-01-01
        • 2012-11-05
        • 1970-01-01
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多