【问题标题】:mysqli insert data is blank and adding doublemysqli插入数据为空白并添加双
【发布时间】:2015-03-06 00:11:47
【问题描述】:

我正在尝试学习 mysqli,所以我转换了我的网站。而且我在更新部分遇到了困难,所以我决定采取一些小步骤,一次走一点。

我正在尝试切换使用 INSERT 的添加项页面。问题是,数据库中没有放入任何内容,而是放入了 2 个空白行。(就像添加了 2 个项目)

我一直在用这个板子问问题,我搜索答案并在提问之前进行反复试验,但我似乎无法掌握这个 mysqli。它在 mysql 上运行良好,但随着它的贬值,我想切换它。

post2.php

     <?php

        $db = new mysqli("localhost","admin","pass","database"); 

        if(!$db) {
    die('sorry we are having some problbems');
}

if(isset($_POST['submit'])) {
    $stmt = $db->prepare("INSERT INTO new_equip(`id`,`itemname`, `manufacture`, `model`,`serial`) VALUES(?,?,?,?,?)");
    $stmt->bind_param("issss", $_POST['id'], $_POST['itemname'], $_POST['manufacture'], $_POST['model'], $_POST['serial']);

    if(!$stmt->execute()) {
    // Do your error stuff

  die('Error: ' . mysqli_error($db));
 }

}
echo $sql;
var_dump($_POST);
mysqli_close($db);
?>

添加项目.php

<form method="post" action="post2.php" enctype="multipart/form-data" class="form-horizontal" accept-charset="UTF-8">
<div class="form-group">
    <label class="col-md-3">Item Name</label>
    <input type="text" name="itemname" value="" class="form-control" />
</div> <!-- /.form-group -->
<div class="form-group">
    <label class="col-md-3">Manufacture</label>
    <input type="text" name="manufacture" value="" class="form-control" />
</div> <!-- /.form-group -->
<div class="form-group">
    <label class="col-md-3">Model</label>
    <input type="text" name="model" value="" class="form-control" />
</div> <!-- /.form-group -->
<div class="form-group">
    <label class="col-md-3">Serial</label>
    <input type="text" name="serial" value="" class="form-control" />
</div> <!-- /.form-group -->
<div class="col-md-8 col-md-push-3">
    <input type="submit" name="Submit" class="btn btn-primary">
    &nbsp;
    <button type="reset" class="btn btn-default">Cancel</button>
</div> <!-- /.col -->

【问题讨论】:

  • 老实说,无论如何你都应该使用绑定 php.net/manual/en/mysqli-stmt.bind-param.php 但是...... echo $sql; 有没有给你任何线索?
  • 看起来什么都没有传递 INSERT INTO new_equip(id,itemname, manufacture, model,serial) VALUES('','',' ','','')
  • if(isset($_POST['submit']))name="Submit" 我看不出它目前是如何工作的。名称属性区分大小写。
  • 弗雷德是对的。此外,您还缺少 if(isset($_POST['submit'])) 块中的 { },这意味着只有在条件执行后的第一行。其他所有内容都将在每次页面加载时执行,无论表单提交如何(这将解释空白行)。如果您打开错误报告,您可能会看到很多“未定义索引”通知,其中它试图使用不存在的 $_POST 值。
  • mysqli_real_escape_string 结合 与准备好的语句一起使用当然是无稽之谈。在迁移到 PS 之前,您应该尝试了解基本原理……

标签: php mysqli


【解决方案1】:

那是因为您运行了 2 次查询。

在这里一次:

$result = $db->query($sql);

第二次来这里:

if (!mysqli_query($db,$sql))

您应该将if (!mysqli_query($db,$sql)) 替换为if (!$result) 或删除$result = $db-&gt;query($sql);

准备好的语句版本:

<?php

    $db = new mysqli("localhost","admin","pass","database"); 

    if(!$db) {
    die('sorry we are having some problbems');
}

if(isset($_POST['submit'])) {
    $stmt = $db->prepare("INSERT INTO new_equip(`id`,`itemname`, `manufacture`, `model`,`serial`) VALUES(?,?,?,?,?)");
    $stmt->bind_param("issss", $_POST['id'], $_POST['itemname'], $_POST['manufacture'], $_POST['model'], $_POST['serial']);

    if(!$stmt->execute()) {
        // Do your error stuff

        die('Error: ' . mysqli_error($db));
    }

}

echo $sql;
var_dump($_POST);
mysqli_close($db);
?>

【讨论】:

  • 查看准备好的语句的编辑答案以转义数据。如果插入的数据还是空白,请确保$_POST变量中有有效数据。
  • 使用准备好的语句得到了这个 - 警告:mysqli_stmt::bind_param():变量的数量与准备好的语句中的参数数量不匹配
  • 是的,很抱歉。我已经更正了答案。现在应该可以了。
  • 警告:mysqli::query():空查询 in- url line23 错误:列 'itemname' 不能为空
  • 您检查过$_POST 以确保其中包含正确的数据吗? var_dump($_POST); 的输出是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2019-05-01
相关资源
最近更新 更多