Php 如何正确发送字段数据并将其插入到时间和日期数据类型的列中
我使用PostgreSQL进行测试,我将一列start\u dte设置为日期数据类型,而scheduled\u time和sla\u time都是时间数据类型。我已经创建了一个允许我插入新记录的表单Php 如何正确发送字段数据并将其插入到时间和日期数据类型的列中,php,postgresql,Php,Postgresql,我使用PostgreSQL进行测试,我将一列start\u dte设置为日期数据类型,而scheduled\u time和sla\u time都是时间数据类型。我已经创建了一个允许我插入新记录的表单 <form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST"> <table border="0" cellspacing="10"> <tr> &
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="POST">
<table border="0" cellspacing="10">
<tr>
<td>RID:</td> <td><input type="text" name="newrid" value=""></td>
</tr>
<tr>
<td>Day:</td> <td><input type="text" name="newday" value=""></td>
</tr>
<tr>
<td>Scheduled Time:</td> <td><input type="text" name="newsched" value=""></td>
</tr>
<tr>
<td>SLA Time:</td> <td><input type="text" name="newsla" value=""></td>
</tr>
<tr>
<td>Start Date:</td> <td><input type="text" name="newsd" value=""></td>
</tr>
<tr>
<td><INPUT TYPE="submit" VALUE="Save" NAME="submit"></td>
</tr>
</table>
下面的PHP代码如下所示:
<?php
if(isset($_POST['submit'])) {
$rid = $_POST['newrid'];
$day = $_POST['newday'];
$scheduled_time = $_POST['newsched'];
$sla_time = $_POST['newsla'];
$start_dte = $_POST['newsd'];
$data = $dbh->prepare("INSERT into meta_auto_reports.frequency values ($rid, '$day', $scheduled_time, $sla_time, $start_dte)");
$data->execute();
echo "<h2>Inserted Successfully</h2>";
$data = null;
}
?>
这显示提交时出现错误:
致命错误:未捕获的异常“PDOException”带有消息
'SQLSTATE[42804]:数据类型不匹配:
因此,我想知道,以postgresql可以接受的方式格式化用户输入的正确方式是什么。这些列也可以为NULL,这意味着用户留下的空白字段在插入时必须为NULL。关于此代码的几点注释: 表单值应存储在数组中:
<td>RID:</td> <td><input type="text" name="form[newrid]" value=""></td>
<td>Day:</td> <td><input type="text" name="form[newday]" value=""></td>
我强烈建议您使用一个库来验证和清理最终用户提交的数据symfony/validator完成这项工作,但还有许多其他库
现在,数据库部分。发送到数据库的数据需要转义,以保护应用程序不受SQL注入的影响。使用预处理语句是将数据作为参数传递的一种方法:
$stmt->prepare("INSERT into meta_auto_reports.frequency values (:id, :day, :scheduled_time …)");
$stmt->execute($form);
直接使用PDO确实会在同一层代码中混合不同的关注点,即how和what。使用库处理数据库连接和查询是一个好主意。Pomm,如果您想要数据库抽象,请特别使用Postgres或任何DBAL或ORM。。。。剩下的错误是什么?
$stmt->prepare("INSERT into meta_auto_reports.frequency values (:id, :day, :scheduled_time …)");
$stmt->execute($form);