【问题标题】:Insert multiple rows using form and PDO使用表单和 PDO 插入多行
【发布时间】:2019-01-12 21:30:14
【问题描述】:

大家好,我被困在 PHP 代码中,无法使用表单和 PDO 插入多行 在我的代码下面请帮我修复它 我会感谢所有 cmets 和建议的解决方案 并原谅我的错误,因为我是 PHP 新手

HTML 代码

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Firstname: <input type="text" name="firstname[]"><br>
Lastname: <input type="text" name="lastname[]"><br>
Email: <input type="text" name="email[]"><br>
<hr>
Firstname: <input type="text" name="firstname[]"><br>
Lastname: <input type="text" name="lastname[]"><br>
Email: <input type="text" name="email[]"><br>
<input type="submit" name="submit" value="Submit">
</form>

PHP 代码

<?php
$servername = "";
$username = "";
$password = "";
$dbname = "";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $firstname = input_checker($_POST["firstname"]);
        $lastname = input_checker($_POST["lastname"]);
        $email = input_checker($_POST["email"]);   

        foreach ($row as $rows) {
            // prepare sql and bind parameters
            $stmt = $conn->prepare("INSERT INTO memo (firstname, lastname, email) 
            VALUES (:firstname, :lastname, :email)");
            $stmt->bindParam(':firstname', $rows);
            $stmt->bindParam(':lastname', $rows);
            $stmt->bindParam(':email', $rows);
            $stmt->execute();

            echo "New records created successfully";
        }
    }
}
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
$conn = null;

function input_checker($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

【问题讨论】:

    标签: php html mysql mysqli pdo


    【解决方案1】:

    请缩进,很难阅读。

    它不能工作。 不要 FOREACH 查询。您将发送一个包含错误数据的查询,次数与 $rows 数组中的元素一样多

    你在这里所做的是什么都不发送,因为 $rows 不存在。

    所以这里是步骤。 做

    $rows = array($firstname, $lastname, $email);
    $stmt = $conn->prepare("INSERT INTO memo(ID, firstname, lastname, email) 
    VALUES (NULL, :firstname, :lastname, :email)");
    foreach($rows as $key => $value){
             $stmt->bindParam($key, $value);
    }
    $stmt -> execute();
    

    或者您可以尝试以这种方式构建查询: DB_connect :

    <?php
        $db_username = "root";
        $db_password = "";
        $db_host = "localhost";
        $db_name = "veterinaires";
        /* PDO EN FR OU EN ARABE C ISSI */
        $db_options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
    
            try {
                $db = new PDO("mysql:host={$db_host};dbname={$db_name};charset=utf8", $db_username, $db_password, $db_options);
            } catch(PDOException $ex) {
                die("Failed to connect to the database: " . $ex->getMessage());
            }
    
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    ?>
    

    查询:

            $query = "INSERT INTO patients
                        (ID,
                        pet_name,
                        breed,
                        colour,
                        sex,
                        date_of_birth,
                        microchip_tatoo,
                        comment,
                        owner_ID)
                    VALUES
                        (NULL,
                        :pet_name,
                        :breed,
                        :colour,
                        :sex,
                        :date_of_birth,
                        :microchip_tatoo,
                        :comment,
                        :owner_ID)";
            $query_params = array(':pet_name' => $pet_name,
                                  ':breed' => $breed,
                                 ':colour' => $colour,
                                 ':sex' => $sex,
                                 ':date_of_birth' => $date_of_birth,
                                 ':microchip_tatoo' => $microchip_tatoo,
                                 ':comment' => $comment,
                                 ':owner_ID' => $_SESSION['ID']);
            try {
                $stmt = $db->prepare($query);
                $result = $stmt->execute($query_params);
                $check = true;
            }catch(PDOException $ex){
                $check = false;
                die("Failed to run query: " . $ex->getMessage());
            }
    ?>
    

    【讨论】:

    • 你知道循环中的execute,否则它只会执行最后一个绑定值。
    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2013-08-03
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多