查询未插入数据库

时间:2016-12-07 14:16:16

标签: php mysql

我需要帮助弄清楚为什么这个查询不起作用。

<?php

session_start();

require 'DB.php';

$message = "Error";

if (!empty($_POST['statement1'])) {
    $sql = "INSERT INTO test2 (first, middle, last, statement1) VALUES ('{$_SESSION['first']}','{$_SESSION['middle']}','{$_SESSION['last']}', :statement1 )";
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':statement1', $_POST['statement1']);
    if ($stmt->execute()) {
        header("Location: Login.php");
    } else {
        echo $message;
    }
}

?>

我之前用另一个数据库测试了这个,我刚刚插入了statement1值,它运行正常。现在我已经添加了会话变量,代码没有完成插入。我该怎么办?

1 个答案:

答案 0 :(得分:1)

如我所见,您可能更愿意这样做:

<?php

session_start();

require 'DB.php';

$message = "Error";

if (
    !isset(
        $_SESSION,
        $_SESSION['first'],
        $_SESSION['middle'],
        $_SESSION['last']
    ) ||
    empty($_SESSION['first']) ||
    empty($_SESSION['middle']) ||
    empty($_SESSION['last'])
) {
    echo 'No valid session...'.PHP_EOL;
} elseif (
    isset($_POST['statement1']) &&
    !empty($_POST['statement1'])
) {
    $stmt = $conn->prepare(
        'INSERT INTO test2 (
            first,
            middle,
            last,
            statement1
        ) VALUES (
            :first,
            :middle,
            :last,
            :statement1
        )'
    );
    $stmt->bindParam(':first', $_SESSION['first']);
    $stmt->bindParam(':middle', $_SESSION['middle']);
    $stmt->bindParam(':last', $_SESSION['last']);
    $stmt->bindParam(':statement1', $_SESSION['statement1']);
    if ($stmt->execute()) {
        header("Location: Login.php");
    } else {
        echo $message;
    }
}

?>

假设您将拥有$_SESSION['first']$_SESSION['middle']$_SESSION['last']$_POST['statement1']个变量,并且假设$conn因页面DB.php而创建No valid session... }

会话问题

如果此代码打印$_SESSION,则您遇到first个变量的问题:

  • middle数组中没有现有last$_SESSION<?php // be sure session_start() is used before to edit $_SESSION variable session_start(); $_SESSION['first'] = 'Foo'; $_SESSION['middle'] = 'Bar'; $_SESSION['last'] = 'Foobar'; 索引
  • 其中一个索引匹配现有值并且值为空值

如果是这样,您可能需要在执行此代码后尝试:

session_start()

刷新! :)(不包括打开的PHP标记,它仅用于指定其他用户此代码是PHP)

您可以在?>之后或关闭Error PHP标记之前插入此代码。

数据库查询问题

如果它正在打印您的默认<?php var_dump($conn->errorInfo()); 消息,那么您的查询可能有问题:您可能正在尝试插入与您的数据库中的类型不匹配的值。为了弄清楚发生了什么,你可能想要使用:

    $length = count($array_new);
    if(empty($array_new)) 
        echo("Array is empty");
    else
        echo("Array is not empty");
    echo("\n");
    print_r($array_new);
    echo("Length of array is".$length);
查询执行后

也检查错误。

参考

我希望这会对你有所帮助!