【问题标题】:what's wrong in this PDO script这个 PDO 脚本有什么问题
【发布时间】:2015-05-24 16:29:03
【问题描述】:

在这里我正在编写一个脚本,它将使用一个简单的 html 表单将三个不同的值发送到数据库。但是每当我提交表单时,都没有插入任何值,并且出现以下错误:

这个错误可能是什么原因。我该如何解决这个问题。

$server='localhost';
$user='root';
$password='';
$dbname='fruits';
if(isset($_POST['name']) &&isset($_POST['colour']) && isset($_POST['calories'])){
   if(!empty($_POST['name']) && !empty($_POST['colour']) && !empty($_POST['calories'])){
$name=$_POST['name'];
$colour=$_POST['colour'];
$calories=$_POST['calories'];
try{
$conn=new PDO('mysql:host=$server,dbname=$dbname,$user,$password');
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$stmt=$conn->prepare("INSERT INTO favfruit(name,colour,calories) 
                      VALUES(:name,:colour,:calories)");

$stmt->execute(array(':name'=>$name,':colour'=>$colour,':calories'=>$calories));
echo 'it was successfully entered to database';
}catch(PDOException $e){
    echo 'error : '.$e->getMessage();
}
}
}

HTML 表单:

<form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post'>
    fruit name :<input type='text' placeholder='fruit name' name='name'></br>
    colur      :<input type='text' placeholder='fruit colour' name='colour'></br>
    calories   :<input type='text' placeholder='calories' name='calories'></br>
    <input type='submit' value='SUBMIT FORM'>
</form>

【问题讨论】:

  • XAMPP 开启了吗?另外,检查 XAMPP 是否没有在 localhost:8081 之类的东西上运行,而不仅仅是 localhost。
  • 我使用 $_SERVER['HTTP_HOST'] 检查并返回 'localhost'。

标签: php mysql forms pdo


【解决方案1】:

您的问题只是一个错字。替换

$conn=new PDO('mysql:host=$server,dbname=$dbname,$user,$password');

通过

$conn=new PDO("mysql:host=$server;dbname=$dbname",$user,$password);

【讨论】:

  • 单引号不起作用,但双引号起作用了。不知道为什么,但它终于起作用了
  • 对不起。我错过了这个。字符串中的变量只能用双引号替换。
【解决方案2】:
require_once($_SERVER['DOCUMENT_ROOT'].'/settings.php');
class db extends pdo{
    //variables
    public $db = '';
    public $config;
    public $settings = array(
        'host'      => SERVER,
        'database'  => DB,
        'username'  => USER,
        'password'  => PASS,
    );

    public function __construct(){

        $this->db = new PDO(
            "mysql:host={$this->settings['host']};" .
            "dbname={$this->settings['database']};" .
            "charset=utf8",
            "{$this->settings['username']}",
            "{$this->settings['password']}"
        );

        $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    }

在 settings.php 文件中定义数据库连接的常量 然后创建一个新函数。

 public function InsertFruit() {
 if(isset($_POST['name']) &&isset($_POST['colour']) && isset($_POST['calories'])){
       if(!empty($_POST['name']) && !empty($_POST['colour']) && !empty($_POST['calories'])){
    $name=$_POST['name'];
    $colour=$_POST['colour'];
    $calories=$_POST['calories'];
    try{
    $query = <<<SQL
    INSERT INTO favfruit(name,colour,calories)
    VALUES(:name,:colour,:calories)
SQL;
    $resource = $this->db->prepare($query);
    $resource->execute(array(
    'name'  => $_POST['name'],
    'colour' => $_POST['colour'],
    'calories' => $_POST['calories'],
));
    echo $_POST['name'].' entered into database';
    $stmt=$conn->prepare("INSERT INTO favfruit(name,colour,calories) 
                          VALUES(:name,:colour,:calories)");

    }catch(PDOException $e){
        echo 'error : '.$e->getMessage();
    }
    }
    }
    }

我确信只要您的网络服务器启动并运行,这将适用于您的连接,并且它将简化您以后需要使用的任何其他连接。至于您的实际形式,只需使用案例流程来确定运行什么功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多