【发布时间】: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">
<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 之前,您应该尝试了解基本原理……