使用PHP不能正常工作插入数据库
<?php
// Create connection
$DB=mysqli_connect("88.80.185.241","Test","","Test");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
} else{
echo "Connected";
echo "<br>";
}
//
$Table = mysqli_query($DB, "SELECT * FROM TBL_Time");
while($Row = mysqli_fetch_array($Table)){
echo "Date: " . $Row['Date'] . " | Time: " . $Row['Time'];
echo "<BR>";
}
$Row = mysqli_fetch_array($Table);
$Date = date("d-m-Y");
$Time = time();
echo "Date: " . $Date . " | Time: " . $Time;
$Insert = "INSERT INTO TBL_Time (Date, Time) VALUES (:D, :T)";
$PreQuery = $DB->prepare($Insert);
$PreQuery->bind_param(':D', $Date);
$PreQuery->bind_param(':T', $Time);
$PreQuery->execute();
?>
为什么插入不工作?我可以读取数据库但不能插入。我检查了特权,他们似乎很好。使用PHP不能正常工作插入数据库
我试着走动的事情,但您使用的PDO风格的占位符语法与:
代替?
还有s
参数来告诉它这是在结合串还没有得到任何地方
。
这两种类型的占位符不会相互混合/互换。
$Insert = "INSERT INTO TBL_Time (Date, Time) VALUES (?, ?)";
$PreQuery = $DB->prepare($Insert);
$PreQuery->bind_param('s', $Date);
$PreQuery->bind_param('s', $Time);
阅读上都和他们的区别:
脚注:
报价法希姆:DATETIME
型
使用一个变量,而不是类型的两个变量
varchar
我知道这是正确的答案,但如果可能的话编辑答案要求OP使用'DATETIME'类型的一个变量而不是'varchar'类型的两个变量' – 2014-10-06 21:33:57
啊谢谢我没有意识到PDO和mysqli之间的区别 – 2014-10-06 21:39:25
@FahimParkar好点。如果你想留在那里,我会+1你的评论。我会记下你的信用。 – 2014-10-06 21:41:00
这是不正确的,因为$ DB是不是一个对象,而是将它用作对象! (如果关键字新的使用对象仅创建)
$Insert = "INSERT INTO TBL_Time (Date, Time) VALUES (:D, :T)";
$PreQuery = $DB->prepare($Insert);
$PreQuery->bind_param(':D', $Date);
$PreQuery->bind_param(':T', $Time);
$PreQuery->execute();
所以写这篇文章,而不是上面的代码:
$Date = mysql_escape_string($Date);
$Time = mysql_escape_string($Time);
mysqli_query($DB,"INSERT INTO TBL_Time (Date, Time) VALUES ($Date, $Time)");
尽管在这种情况下,变量是由脚本生成的,并且可以安全使用,但我绝不会建议用直接注入变量的查询替换准备好的语句。并没有引用。 – jeroen 2014-10-06 21:28:00
添加一些错误检查,你会相当快找出来。 – 2014-10-06 21:15:48
不确定,但我认为日期是一个保留字,如果你命名了你的列,所以你必须逃避它..像(\'Date \',\'Time \')(反引号) – Rufinus 2014-10-06 21:16:13
您正在使用PDO占位符语法,使用'$ var'和'?'不'':var' – 2014-10-06 21:18:25