PHP MySQLInsert准备好的语句
我正在学习PHP编写的语句,并在使用MySQL INSERT命令时实现它们。在没有准备好的语句的情况下,我可以做得很好,但是在添加了准备好的语句之后,我对代码中哪里出错感到困惑 下面的代码给出了“内部服务器错误”,但它在语法上似乎是正确的 编辑: 以下是dbConnet.php:PHP MySQLInsert准备好的语句,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我正在学习PHP编写的语句,并在使用MySQL INSERT命令时实现它们。在没有准备好的语句的情况下,我可以做得很好,但是在添加了准备好的语句之后,我对代码中哪里出错感到困惑 下面的代码给出了“内部服务器错误”,但它在语法上似乎是正确的 编辑: 以下是dbConnet.php: <?php $hostname = "*"; $username = "*"; $database = "*"; $passwo
<?php
$hostname = "*";
$username = "*";
$database = "*";
$password = "*";
$link = mysqli_connect($hostname, $username, $password, $database);
if (!$link)
{
die('Could not connect: ' . mysqli_connect_error());
}
?>
代码:
<?php
include('dbConnect.php');
$stmt = $mysqli->prepare("INSERT INTO Articles (content, date) VALUES (?,?)");
$stmt->bind_param('si', $article, $submitTime);
$article = $_POST['articleArea'];
$submitTime = new DateTime();
$submitTimeString = $submitTime->format("m-d-Y H:i:s");
$stmt->execute();
if (mysqli_query($link,$stmt) )
{
echo "<script language='javascript'>alert('Article has been submitted!')</script>";
echo "<script language='javascript'>window.location = 'URL'</script>";
}
else
{
echo "<script language='javascript'>alert('Uh oh! An error has been encountered! Please try to resubmit your article.')</script>";
echo "<script language='javascript'>window.location = 'URL'</script>";
}
mysqli_close($link);
?>
$submitTimeString
格式错误。MySQL期望日期时间为date('Y-m-dh:i:s')
(第一年)
您的数据库连接是$link
,但您使用$mysqli->prepare(..)
。是哪一个
您正在使用execute()
调用$stmt
,但接下来还将使用mysqli\u query()
。那是胡说八道。使用其中一个,而不是两个
mysqli\u query()
需要一个查询字符串,但您给它一个准备好的语句对象
您正在将$submitTime
绑定到语句,这是一个DateTime
对象,mysqli可能不喜欢它。您从未在任何地方使用格式化日期$submitTimeString
这些错误中的任何一个都可能触发致命错误。你需要从头重写。如何使用mysqli扩展。在绑定到$stmt时是否定义了$submitTime?
$article和$submitTime都是在绑定后初始化的。
您应该绑定日期字符串,而不是DateTime对象。尝试使用
$stmt = $link->prepare("INSERT INTO Articles (content, date) VALUES (?,?)");
$stmt->bind_param('ss', $article, $submitTimeString);
$article = $_POST['articleArea'];
$submitTime = new DateTime();
$submitTimeString = $submitTime->format("m-d-Y H:i:s");
而不是
$stmt = $mysqli->prepare("INSERT INTO Articles (content, date) VALUES (?,?)");
$stmt->bind_param('si', $article, $submitTime);
$article = $_POST['articleArea'];
$submitTime = new DateTime();
$submitTimeString = $submitTime->format("m-d-Y H:i:s");
如果该错误是由于尝试同时使用$link和$mysqli连接到数据库(正如deceze所指出的那样)引起的,那么应该可以解决该问题。至于日期,我建议将数据库中的“日期”更改为“文本”数据类型(因此,$stmt->bind_-param('ss',$article,$submitTimeString);
vs$stmt->bind_-param('si',$article,$submitTimeString);
,您在哪里初始化$link?查看错误日志和/或激活显式错误报告。“内部服务器错误”一点帮助都没有,您需要PHP提供详细的错误消息。我已经更新了我的原始问题,将dbConnect中的代码也包括在内。是的,这不会破坏它,它只会插入“0000-00-00:00:00”作为日期