Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQLInsert准备好的语句_Php_Mysql_Prepared Statement - Fatal编程技术网

PHP MySQLInsert准备好的语句

PHP MySQLInsert准备好的语句,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我正在学习PHP编写的语句,并在使用MySQL INSERT命令时实现它们。在没有准备好的语句的情况下,我可以做得很好,但是在添加了准备好的语句之后,我对代码中哪里出错感到困惑 下面的代码给出了“内部服务器错误”,但它在语法上似乎是正确的 编辑: 以下是dbConnet.php: <?php $hostname = "*"; $username = "*"; $database = "*"; $passwo

我正在学习PHP编写的语句,并在使用MySQL INSERT命令时实现它们。在没有准备好的语句的情况下,我可以做得很好,但是在添加了准备好的语句之后,我对代码中哪里出错感到困惑

下面的代码给出了“内部服务器错误”,但它在语法上似乎是正确的

编辑:

以下是dbConnet.php:

    <?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”作为日期