使用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参数来告诉它这是在结合串还没有得到任何地方

+1

添加一些错误检查,你会相当快找出来。 – 2014-10-06 21:15:48

+1

不确定,但我认为日期是一个保​​留字,如果你命名了你的列,所以你必须逃避它..像(\'Date \',\'Time \')(反引号) – Rufinus 2014-10-06 21:16:13

+1

您正在使用PDO占位符语法,使用'$ var'和'?'不'':var' – 2014-10-06 21:18:25

这两种类型的占位符不会相互混合/互换。

$Insert = "INSERT INTO TBL_Time (Date, Time) VALUES (?, ?)"; 
$PreQuery = $DB->prepare($Insert); 

$PreQuery->bind_param('s', $Date); 
$PreQuery->bind_param('s', $Time); 

阅读上都和他们的区别:


脚注:

报价法希姆:DATETIME

使用一个变量,而不是类型的两个变量varchar

+0

我知道这是正确的答案,但如果可能的话编辑答案要求OP使用'DATETIME'类型的一个变量而不是'varchar'类型的两个变量' – 2014-10-06 21:33:57

+0

啊谢谢我没有意识到PDO和mysqli之间的区别 – 2014-10-06 21:39:25

+0

@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)"); 
+1

尽管在这种情况下,变量是由脚本生成的,并且可以安全使用,但我绝不会建议用直接注入变量的查询替换准备好的语句。并没有引用。 – jeroen 2014-10-06 21:28:00