【问题标题】:Insert data into table using php [closed]使用php将数据插入表中[关闭]
【发布时间】:2013-06-15 12:08:24
【问题描述】:

我的html表单如下:

<html>
<body>
<form action="createconnection.php" method="post">

Firstname : <input type="text", name="fname"> </br>
Lastname : <input type="test" name="lname"> </br>
Age : <input type="text" name="age"></br>

<input type="submit">

</form>
</body>
</html>

和php文件: 表名和数据库名都可以。

<?php
// Create connection

$con=mysqli_connect('127.0.0.1:3306' ,'root','root','my_db');
echo "hi";
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$sql="INSERT INTO table1 (Fname, LName, Age)
VALUES
('$_POST[fname]','$_POST[lname]','$_POST[age]')";

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
echo "1 record added";

mysqli_close($con);
?> 

我尝试了很多,但是当我执行它时,它什么也没提供,也没有在表中更新。

【问题讨论】:

  • 您使用的是mysqli,这很好,但为什么不使用准备好的语句呢?
  • 除了sql-injection,您应该在$sql的字符串语句中的每个$_POST周围使用{}
  • 是 LName 还是 Lname ?
  • 使用 echo 或 print 打印查询,然后从浏览器复制打印的查询并使用 phpmyadmin 或任何方式在 mysql 中检查。

标签: php mysql database


【解决方案1】:

这是您的代码的一个非常简单的工作示例,其中包含准备好的语句。

注意查询上的询问标志,bind_params 表示字符串,i 表示整数,you can read more here

所以ssi 表示我们将收到 2 个字符串和 1 个整数条目。

<?php
// Your database info
$db_host = '';
$db_user = '';
$db_pass = '';
$db_name = '';

if (!empty($_POST))
{   
        $con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
        if ($con->connect_error)
            die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());

        $sql = "INSERT INTO table1 (Fname, LName, Age) VALUES (?,?,?)";
        if (!$stmt = $con->prepare($sql))
            die('Query failed: (' . $con->errno . ') ' . $con->error);

        if (!$stmt->bind_param('ssi',$_POST['fname'],$_POST['lname'],$_POST['age']))
            die('Bind Param failed: (' . $con->errno . ') ' . $con->error);

        if (!$stmt->execute())
                die('Insert Error ' . $con->error);

        echo "Record added";
        $stmt->close();
        $con->close();
}
?>
<html>
<body>
<form action="createconnection.php" method="post">

Firstname : <input type="text", name="fname"> </br>
Lastname : <input type="test" name="lname"> </br>
Age : <input type="text" name="age"></br>

<input type="submit">

</form>
</body>
</html>

以防万一这里是使用的 SQL 表:

CREATE TABLE IF NOT EXISTS `table1` (
  `Fname` varchar(50) NOT NULL,
  `LName` varchar(50) NOT NULL,
  `Age` int(3) NOT NULL
);

【讨论】:

  • +1 表示有人真正花时间展示准备好的陈述,而不是仅仅告诉他们准备陈述。
  • 感谢 Prix 的努力,但这会重定向到 creatconnection.php 并给出 connect_error) die('Connect Error (' . mysqli_connect_errno() . ') '.mysqli_connect_error()); $stmt = $con->prepare("INSERT INTO table1 (Fname, LName, Age) VALUES (?,?,?)"); $stmt->bind_param('ssi',$_POST['fname'],$_POST['lname'],$_POST['age']); if (!$stmt->execute()) die('插入错误' . $con->error); echo "添加了 1 条记录"; $stmt->关闭(); $con->close(); } ?> 浏览器出错!
  • @Programming_crazy 您能否更具体地说明您使用此代码所做的事情,您能否复制并粘贴确切的错误?
  • @SableFoste 谢谢,OP 使用 mysqli 而不是 mysql_* 的事实让我很高兴能帮助他。我的意思是 50% 甚至更多的人继续使用 mysql_*,尽管所有的警告和一切都很悲伤。
  • @Programming_crazy 你确定文件是正确的并且你正在像http://yoursite.com/createconnection.php一样访问它吗?在我看来,它将文件的内容打印到浏览器而不是错误消息
【解决方案2】:

你应该像这样修改你的sql(变量应该连接起来)

$sql="INSERT INTO table1 (Fname, LName, Age) VALUES
    ('".$_POST['fname']."','".$_POST['lname']."',".$_POST['age'].")";

【讨论】:

  • 有什么理由拒绝投票??
  • 我没有投反对票,但请在 $_POST 内编辑以使用单引号。
  • 嗯,如果我不得不对你投反对票,我会说这是因为 1)你没有做任何与问题不同的事情,2)你没有使用准备好的陈述,这很重要而且非常简单,因为他正在使用 mysqli
  • @Prix 连接在导致真正错误的问题中丢失。我同意我们可以做很多事情来改进,但这不是当前的问题。
  • @harrybvp 他不需要连接,因为他的变量使用双引号而不是单引号
猜你喜欢
  • 1970-01-01
  • 2014-09-25
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多