【问题标题】:Insert MySQL not working with var and insert empty row插入 MySQL 不使用 var 并插入空行
【发布时间】:2014-09-04 21:04:47
【问题描述】:

我尝试了很长时间才明白这段代码出了什么问题:

我有两个要放入数据库的数组,但可以随时更改数组。所以它需要动态工作。

我得到的只是一个没有任何数据的空行 - 但作为字符串它可以正常工作。

如果我编写查询的输出字符串,它可以工作,但这样不行:

$fields = $values = array();
                $j = 0;

                while ($j < mysql_num_fields($query)) {
                    $namee = mysql_fetch_field($query, $j)->name;
                    if(isset($AutoFill[$namee])){
                        if($AutoFill[$namee] == '?')
                            $values[]  = "'".mysql_real_escape_string("dopd")."'";//$_POST[$namee]
                        else
                            $values[] = "'".mysql_real_escape_string($AutoFill[$namee])."'";
                        $fields[] = "$namee";
                    }
                    $j++;
                }
                $fields = implode(",", $fields);
                $values = implode(",", $values);
// not working
                mysql_query("INSERT INTO ".$table_name." (".$fields.") VALUES (".$values.")");
// "INSERT INTO ".$table_name." (".$fields.") VALUES (".$values.")" => tostring working:
        mysql_query("INSERT INTO _users (user_name,display_name,password,email,activation_token,last_activation_request,lost_password_request,active,title,sign_up_stamp,last_sign_in_stamp) VALUES ('dopd','dopd','dopd','dopd','dopd','1409863484','0','dopd','New Member','1409863484','0')");

【问题讨论】:

    标签: php mysql insert insert-into


    【解决方案1】:

    这不起作用,因为您无法将数组传递给查询。

    mysql_query("INSERT INTO ".$table_name." (".$fields.") VALUES (".$values.")");
    

    试试这个:

    mysql_query( "INSERT INTO ".$table_name." ('" . implode("','", $fields) . "') VALUES ('" . implode("','", $values) . "');" );
    

    这将从您的数组中创建一个字符串,该字符串将正确传递到 SQL 语句中。在查询语句中而不是在上面进行内爆。此外,您没有将值单独包装在引号中,因此您得到一长串值(即:'1,2,3')而不是单独引用的值(即:'1','2','3 ')。

    【讨论】:

    • 另外,您可能应该使用 mysqli 或 pdo 进行数据库连接。出于安全原因,不推荐使用标准的 mysql 函数集。
    • 对于 $fields 我相信你想摆脱列名周围的单引号。
    • 尝试 $query = "INSERT INTO ".$table_name." ('" . implode("','", $fields) . "') VALUES ('" . implode("', '", $values) . "');"回声$查询;然后在 phpmyadmin/sequel pro/etc 中手动运行查询。如果它抛出一个错误,应该告诉你你的问题是什么。一般来说,这是调试查询的一种非常简单的方法。
    • 谢谢 - 毕竟我发现了问题 - 我的代码没有问题,除了我忘记了 declere $query 变量。最后,我根据需要进行了动态查询 :) 祝大家周末愉快。
    【解决方案2】:

    解决方案是 $query 没有在正确的位置 og 范围内正确地删除。 该代码适用于用户提供的任何长度和长度的信息。

    谢谢大家 - 最好的周末。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-04
      • 2013-01-21
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      相关资源
      最近更新 更多