使用PDOPHP在mySQL数据库中插入数字数据

问题描述

我正在尝试使用PHP数据对象(PDO)在MysqL数据库中插入字符串(:make和:model)和数字(:year和:mileage)数据。问题是代码没有在数据库中插入数字数据(我想原因是在代码中,它自动将:year和:mileage数据类型从int更改为数据库中的str。year和'mileage'列表是INT类型。)如何更改代码以将:year和:mileage插入INT数据?

//PDO
<?PHP
$pdo = new PDO('MysqL:host=localhost;port=8888;dbname=xxxx','xxx','xxx');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

 //sql 
 $sql = "INSERT INTO autos (make,model,year,mileage)
                  VALUES (:make,:model,:year,:mileage)";
        $stmt = $pdo->prepare($sql);
        $stmt->execute(array(
            ':make' => $_POST['make'],':model' => $_POST['model'],':year' => $_POST['year'],':mileage' => $_POST['mileage']));
        $_SESSION['success'] = 'Record Added';
        header( 'Location: index.PHP' ) ;
        return;
?>

<form method="post">
<p>Make:
<input type="text" name="make"></p>
<p>Model:
<input type="text" name="model"></p>
<p>Year:
<input type="number" name="year"></p>
<p>Mileage:
<input type="number" name="mileage"></p>
<p><input type="submit" value="Add New"/>

<!--sql schema--!>
CREATE TABLE autos (
  autos_id INTEGER NOT NULL KEY AUTO_INCREMENT,make VARCHAR(255),model VARCHAR(255),year INTEGER,mileage INTEGER
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

解决方法

这里的问题是PHP POST数据是字符串,因此您需要在插入之前进行转换。

<--PDO code-->
<?php
$pdo = new PDO('mysql:host=localhost;port=8888;dbname=xxxx','xxx','xxx');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

 //SQL 
 $sql = "INSERT INTO cars (make,model,year,mileage)
                  VALUES (:make,:model,:year,:mileage)";
        $stmt = $pdo->prepare($sql);
        $stmt->execute(array(
            ':make' => $_POST['make'],':model' => $_POST['model'],':year' => intval($_POST['year']),':mileage' => intval($_POST['mileage'])));
        $_SESSION['success'] = 'Record Added';
        header( 'Location: index.php' ) ;
        return;
?>

<form method="post">
<p>Make:
<input type="text" name="make"></p>
<p>Model:
<input type="text" name="model"></p>
<p>Year:
<input type="number" name="year"></p>
<p>Mileage:
<input type="number" name="mileage"></p>
<p><input type="submit" value="Add New"/>