用php将数据插入到mysql数据库的现有表中

时间:2016-05-16 10:47:13

标签: php html mysql sql-insert

我收到新记录已创建的消息,但是当我重新加载phpmyadmin时,表格是相同的。我也从同一个DB中检索了信息, 从同一个表,用SELECT命令,所以连接工作..(明确地说)。我不知道为什么不更新。请帮忙。提前谢谢。

<html>
<head>
</head>
<body>
<?php 
define('DB_NAME', 'appointments');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

if (!$link) {
    die('Could not connect: ' . mysql_error());
}
$hos=$_POST['hos'];
echo $hos;
echo "<br/>";
$doc=$_POST['doc'];
echo $doc;
$date=$_POST['fdate'];
echo $date;
$time=$_POST['time'];
echo $time;
$pat=5;
echo $pat;
$sql = "INSERT INTO rantevou ('app_id','patient_id','date','time','hos','doc') VALUES ('4','$pat','$date','$time','$hos','$doc');";
if ($sql) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
mysqli_close($link);
?>
</body>
</html>

7 个答案:

答案 0 :(得分:0)

您忘记执行查询,if ($sql) {仅评估变量。

if (mysqli_query($link, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

此外,您需要对SQL相关变量使用反引号,而不是单引号:

$sql = "INSERT INTO rantevou (`app_id`,`patient_id`,`date`,`time`,`hos`,`doc`) VALUES ('4','$pat','$date','$time','$hos','$doc');";

答案 1 :(得分:0)

您实际上并未执行查询。如果在声明$result = mysqli_query($link, $sql);后添加行$sql,则会执行查询。

然后,您可以评估它是否使用相同的if,但将该行更改为

if ($result) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($link);
}

在上面的示例中,我还更改了您的错误报告,因为它引用了$ conn,这是您之前未声明过的变量。它现在使用与其余代码相同的$link变量。

此外,我强烈建议您转发数据,因为您要插入已发布数据的内容。转义数据有助于防范SQL Injection。它不是全面安全的,但它是一个良好的开端。

要添加转义功能,请将每个$var = $_POST['var']行更改为$var = mysqli_real_escape_string($link, $_POST['var']);

例如,$hos=$_POST['hos'];变为$hos = mysqli_real_escape_string($link, $_POST['hos']);

这有助于防止像XKCD enter image description here

这样精彩的例子

答案 2 :(得分:0)

1)single quotes(&#39;)从列名移至backtick(`)

2)执行您的查询。你没有被处决。

3)如果app_id列为auto incrementedprimary key。然后,不需要传递价值。留空。

<?php
$sql = "INSERT INTO rantevou (`app_id`,`patient_id`,`date`,`time`,`hos`,`doc`) VALUES ('','$pat','$date','$time','$hos','$doc');";
$query = mysqli_query($link,$sql) ;

if ($query) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

答案 3 :(得分:0)

你的代码中有很多错误

<强> 1。使用mysql_error()

您无法使用mysql_error,因为您使用mysqli进行数据库连接。第二件事mysql不再受支持

解决方案使用mysqli_error($link);

<强> 2。使用$conn->error

您可以$conn->error mysqli使用$conn程序方式,而不是面向对象的方式,而且您也没有定义$link,而是使用mysqli_error($link); }

解决方案使用if(!mysqli_query($link, $sql)){ printf("Errormessage: %s\n", mysqli_error($link)); die; }else{ echo "New record created successfully"; }

更正代码

$sql

为什么不插入数据

因为您声明了变量$sql,但您没有执行

创建了新记录

您可以通过各种方式获取此消息,因为if条件检查变量是否具有值(不是0)而是app_id具有值

1.如果您不想在insert语句中注入任何SQL,请务必使用prepare语句SQL INJECTION

2&#39;&#39;单引号或&#34;&#34;如果int 1 row metrics未使用(&#39;&#39;或#34;&#34;)引用,则仅应用于不在ID上的字符串转换&#39; 4&#39;到int

3.handle错误日志https://stackoverflow.com/a/3531852/3234646

4.请清除数据库扩展的概念使用   http://php.net/manual/en/class.mysqli.php

答案 4 :(得分:-1)

而不是

"INSERT INTO rantevou ('app_id','patient_id','date','time','hos','doc') VALUES ('4','$pat','$date','$time','$hos','$doc');"

取消引用列

"INSERT INTO rantevou (app_id, patient_id, date, time, hos, doc) VALUES ('4','$pat','$date','$time','$hos','$doc');"

或使用反引号

"INSERT INTO rantevou (`app_id`, `patient_id`, `date`, `time`, `hos`, `doc`) VALUES ('4','$pat','$date','$time','$hos','$doc');"

您已忘记执行查询

mysqli_execute($con, "INSERT INTO rantevou (`app_id`, `patient_id`, `date`, `time`, `hos`, `doc`) VALUES ('4','$pat','$date','$time','$hos','$doc')");

答案 5 :(得分:-1)

首先,不要对列名使用单引号,要么不使用,要么使用反引号 其次,你忘了执行查询 此外,使用OOP更好。

请尝试:

$mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);

$query = "INSERT INTO rantevou (app_id,patient_id,date,time,hos,doc) VALUES ('4','$pat','$date','$time','$hos','$doc');";
if ($mysqli->query($query)) echo "New record created";
else echo "Error: ".$mysqli->error;

答案 6 :(得分:-1)

编辑:路维奇说:声明尚未执行!

好像你知道自己在做什么。你确定这里的参数:

$sql = "INSERT INTO rantevou (**'app_id','patient_id','date','time','hos','doc'**) VALUES ('4','$pat','$date','$time','$hos','$doc');";
if ($sql) {

与数据库中的列标题完全匹配?

检查语句的另一个好方法是转到phpmyadmin并转到SQL记事本并输入具有相同结构的查询并查看返回的内容。

您的查询可能会返回一条消息,但会显示一条消息,指出它已失败...这仍然会触发您的echo "New record created successfully";

这就是我将最近一次插入到DB中的方式:

<?php
// to get data from android app

$gardenID=$_POST["gardenID"];
$vID=$_POST["vID"];
$quantity = $_POST["quantity"];
$timePlanted = date("Y/m/d");

// establishes connection to database
require "init.php";
    echo "here";
    echo $timePlanted;
    echo $quantity;

$query = "insert into garden_veg (gardenID, vID, quantity, timePlanted) values ('".$gardenID."','".$vID."',
                                        '".$quantity."', '".$timePlanted."' );";

$result = mysqli_query($con,$query);
            $response = array();
            $code = "addItem_success"; //changed code
            $message = "Item(s) added!";
            array_push($response,array("code" => $code, "message"=>$message));
            echo json_encode(array("server_response"=>$response));
    mysqli_close($con);
?>