【问题标题】:PHP For Loop to build insert stringPHP For循环构建插入字符串
【发布时间】:2014-01-02 01:05:54
【问题描述】:

我正在尝试向数据库中插入几个值。

首先我将这些值添加到数组中(函数/其他代码省略):

$name = (isset($_POST['name']) ? ($_POST['name']) : "name");
$email = (isset($_POST['email']) ? ($_POST['email']) : "email"); 
$username = $mysqli->real_escape_string($_POST['username']);
$password = $mysqli->real_escape_string(md5($_POST['password']));

像这样:

$formvars = array();
array_push($formvars, $name, $email, $username, $password); 

然后调用函数插入:

    $sql = array(); 
        for ($i = 0; $i < count($formvars);$i++) {
            $sql[] = $formvars[$i];
        }

        print_r(implode(',', $sql));

        $qry = 'INSERT INTO chinesegame (name, email, username, password) VALUES '. implode(',' , $sql);

        if(!$mysqli->query($qry))
        {
            echo "Error inserting data to the table \nquery:$qry";
            return false;
        }        

    return true;

我的数据库结构是这样的:

它给了我一个插入错误:

向表查询插入数据时出错:INSERT INTO chinesegame (name, 电子邮件、用户名、密码) 丹,dthusky@gmail.com,danman,827ccb0eea8a706c4c34a16891f84e7b

我可以不构建这样的插入字符串吗?

【问题讨论】:

  • 字符串应该在 SQL 上下文中被引用。你也考虑过绑定参数吗?
  • @mario 我无法使用这些,所以我选择了 real_escape_string。您能否详细说明 SQL 上下文中的字符串引号
  • 是的,mysqli 很难正确使用。查看pdo_query()

标签: php insert mysqli


【解决方案1】:

您忘记了“VALUES”关键字。括号也有帮助。您还需要将所有值都放在引号中,这是正确的版本:

$qry = 'INSERT INTO chinesegame (name, email, username, password) VALUES ("'. implode('","' , $sql). '")';

另外,mysqli->query 首先接受一个连接变量,其中包含与数据库的连接信息,它应该如下所示:

$connection = mysqli_connect("localhost","my_user","my_password","my_db");
if(!$mysqli->query($connection, $qry))

另外,为了记录,

    $sql = array(); 
    for ($i = 0; $i < count($formvars);$i++) {
        $sql[] = $formvars[$i];
    }

可以替换为

$sql = $formvars;

没有理由一次又一次地循环整个事情。

【讨论】:

  • 好吧,哎呀哈哈。所以即使引号固定,它仍然会产生插入错误
  • 你能在运行前打印$qry并粘贴到这里吗?
  • 我是否需要考虑 id 的自动增量主键?此外,打印给出: INSERT INTO chinesegame (name, email, username, password) VALUES ("Dan","dthusky@gmail.com","danman","827ccb0eea8a706c4c34a16891f84e7b")
  • 打印 mysqli_error();在返回之前在 if 语句中执行查询之后。复制到这里。
  • 自动增量会自动工作,不用担心。
【解决方案2】:

您似乎在插入语句中遗漏了一些内容:

$qry = 'INSERT INTO chinesegame (name, email, username, password) '. implode(',' , $sql);

尝试将插入语句更改为:

$qry = 'INSERT INTO chinesegame (name, email, username, password) VALUES ('. implode(',' , $sql).')';

【讨论】:

  • 值需要用引号括起来,我给你一个正确的版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2019-11-26
  • 2013-09-27
相关资源
最近更新 更多