【问题标题】:Updating php mysql_query() to prepared statement将 php mysql_query() 更新为准备好的语句
【发布时间】:2013-06-29 07:37:12
【问题描述】:

根据一些较早的教程,我创建了一个公式,它使用 mysql_query() 将一些信息存储到 mysql DB 中。 但现在我读了一些帖子,说不应该再使用 mysql_query() 所以我试图“翻译”我的旧代码。 但之后它不再起作用,并且没有新条目存储在我的数据库中。 你能帮忙吗?

<?php
    require '../db/connect.php';

    if ($mysqli->connect_error) {
      echo "Fehler bei der Verbindung: " . mysqli_connect_error();
      exit();
    }

    $flightDate = $_POST['flightDate'];
    $planeID = $_POST['planeID'];
    $planeType = $_POST['planeType'];
    $pilot = $_POST['pilot'];
    $passengers = $_POST['passengers'];


/*  
    $sql = "INSERT INTO `flights`
                (`flightDate`, `planeID`,`planeType`, `pilot`, `passengers`)
            VALUES(
                '" .$flightDate. "',
                '" .$planeID. "',
                '" .$planeType. "',
                '" .$pilot. "',
                '" .$passengers. "'
            )";
    mysql_query( $sql ) or die(mysql_error());
*/



    // prepared statement   
    if($stmt = $mysqli->prepare("INSERT INTO flights
                                        (flightDate, planeID,planeType, pilot, passengers)
                                VALUES (?, ?, ?, ?, ?)")) {
      $stmt->bind_param("sssss", $flightDate, $planeID, $planeType, $pilot, $passengers);
      $stmt->execute();
      echo "Anzahl der veränderten Datensätze : " . $stmt->affected_rows;
      $stmt->close();
    }

    $mysqli->close();

似乎我的变量有问题。如果我直接在浏览器中调用 php 文件,我会收到很多错误消息:

Notice: Undefined index: flightDate in C:\xampp\htdocs\phptomysql\try_2\ajax\addFlight.php on line 9

Notice: Undefined index: planeID in C:\xampp\htdocs\phptomysql\try_2\ajax\addFlight.php on line 10

Notice: Undefined index: planeType in C:\xampp\htdocs\phptomysql\try_2\ajax\addFlight.php on line 11

Notice: Undefined index: pilot in C:\xampp\htdocs\phptomysql\try_2\ajax\addFlight.php on line 12

Notice: Undefined index: passengers in C:\xampp\htdocs\phptomysql\try_2\ajax\addFlight.php on line 13
Anzahl der veränderten Datensätze : -1

我正在使用以下 jquery 函数将值从我的表单传递到 php:

//add flight to db
$('#flightSubmit').on('click', function(){
    var flightDate = ($.datepicker.formatDate("yy-mm-dd", $('#flightDateInput').datepicker("getDate")));
    var planeID = $('input#planeIDInput').val();
    var planeType = $('input#planeTypeInput').val();
    var pilot = $('input#pilotInput').val();
    var passengers = $('input#passengersInput').val();
    $.post('ajax/addFlight.php', {flightDate: flightDate, planeID: planeID, planeType: planeType, pilot: pilot, passengers: passengers}, function(data){
        });
});

【问题讨论】:

  • $flightDate = ""$_POST['flightDate']; 删除那里的引号。
  • 删除了它。在 chrome 开发控制台的网络面板中,我可以看到我的 php 文件的“已取消”状态。
  • 这就是我从 mysqli 迁移到 PDO 的原因。它有点不同,但要简单得多。
  • @Herbert 你的意思是 mysql_* 是 OP 从中迁移出来的吗?因为 MySQLi 和 PDO 既简单又好用。
  • @Prix:不,我是说 MySQLi。我从来没有很喜欢使用它,尤其是。在准备好的语句和绑定参数的上下文中。

标签: php mysqli


【解决方案1】:

你有错误吗? 或者它只是不插入到数据库中? 您能否像这样 var_dump 您的 $_POST 和 $stmt

<?php
    require '../db/connect.php';

    if ($mysqli->connect_error) {
      echo "Fehler bei der Verbindung: " . mysqli_connect_error();
      exit();
    }

    $flightDate = $_POST['flightDate'];
    $planeID = $_POST['planeID'];
    $planeType = $_POST['planeType'];
    $pilot = $_POST['pilot'];
    $passengers = $_POST['passengers'];

var_dump($_POST);

    // prepared statement   
$stmt = $mysqli->prepare("INSERT INTO flights
                                        (flightDate, planeID,planeType, pilot, passengers)
                                VALUES (?, ?, ?, ?, ?)");
var_dump($stmt);
    if($stmt) {
      $stmt->bind_param("sssss", $flightDate, $planeID, $planeType, $pilot, $passengers);
      $stmt->execute();
      echo "Anzahl der veränderten Datensätze : " . $stmt->affected_rows;
      $stmt->close();
    }

    $mysqli->close();

【讨论】:

    【解决方案2】:

    这和mysqli无关,如果没有posted data(空)会报这个错误。

    你只需要用

    包装你的代码

    if (!empty($_POST) { }

    【讨论】:

      【解决方案3】:

      您有mysql_* 电话和mysqli_* 电话的混合。这不会起作用。 先修复

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-21
        • 1970-01-01
        • 2015-06-27
        • 1970-01-01
        • 2012-08-23
        • 2011-08-01
        相关资源
        最近更新 更多