简体   繁体   English

使用PDO更改mysql_函数

[英]Change mysql_ functions with PDO

I need to rewrite my php code with mysql_* functions with PDO so I have: 我需要使用PDO用mysql_ *函数重写php代码,所以我需要:

<?php

$con = mysql_connect('localhost', 'gmaestro_agro', 'pass') or die('Error connecting to server');

mysql_select_db('gmaestro_agro', $con); 

    mysql_select_db('gmaestro_agro', $con);
    $query = "INSERT INTO `stat` (`Name`, `Gender`, `Age`, `Donuts eaten`) VALUES (";
      $query .= "'".mysql_real_escape_string($_POST['Name']) . "', ";
      $query .= "'".mysql_real_escape_string($_POST['Gender']) . "', ";
      $query .= "'".mysql_real_escape_string($_POST['Age']) . "', ";
      $query .= "'".mysql_real_escape_string($_POST['Donuts_eaten']);
      $query .= "')";
    $result = mysql_query($query);
    if($result != false) {
        echo "success!";
    } else {
        echo "an error occured saving your data!";
    }

?>

and I try to write this but with PDO function like this: 我尝试编写此代码,但使用如下的PDO函数:

<?php


    /* Your Database Name */
    $dbname = 'gmaestro_agro';

    /* Your Database User Name and Passowrd */
    $username = 'gmaestro_agro';
    $password = 'pass';

     $stmt = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
      $stmt->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);



    $sql = "INSERT INTO stat(Name,
            Gender,
            Age,
            Donuts eaten
            ) VALUES (
            :Name, 
            :Gender, 
            :Age, 
            :Donuts_eaten)";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(':Name', $_POST['name'], PDO::PARAM_STR);       
$stmt->bindParam(':Gender', $_POST['gender'], PDO::PARAM_STR); 
$stmt->bindParam(':Age', $_POST['age'], PDO::PARAM_STR);
// use PARAM_STR although a number  
$stmt->bindParam(':Donuts_eaten', $_POST['Donuts_eaten'], PDO::PARAM_STR); 

$stmt->execute(); 
if($stmt != false) {
        echo "success!";
    } else {
        echo "an error occured saving your data!";
    }

    ?>

I dont get any error just nothing happend? 我没有得到任何错误,只是什么都没有发生? Any idea how to solve my problem? 知道如何解决我的问题吗?

You are mixing up your variables, $pdo is undefined / not your database connection. 您正在混淆变量, $pdo是未定义的/不是数据库连接。

You can probably solve it by using: 您可能可以通过使用以下方法解决它:

 $pdo = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

instead of: 代替:

 $stmt = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
 $stmt->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

And if a table or column name contains spaces, you need to quote them in backticks: 并且,如果表名或列​​名包含空格,则需要在反引号中将其引起来:

        Gender,
        Age,
        `Donuts eaten`
        ) VALUES (

But with the first change, PDO should throw an exception to show you this problem. 但是,通过第一个更改,PDO应该抛出异常来向您显示此问题。

Edit (successful test code) 编辑(成功的测试代码)

Table and data creation codes used for the successful insertion (test). 用于成功插入(测试)的表和数据创建代码。

Column Donuts_eaten has been used with an underscore instead of a space. Donuts_eaten列已使用下划线而不是空格。

You can base yourself on this: 您可以基于此:

Table creation codes in PHPmyadmin PHPmyadmin中的表创建代码

Note: Change your_db_name to your Database name. 注意:将 your_db_name更改为您的数据库名称。

CREATE TABLE `your_db_name`.`stat` (
`Name` VARCHAR( 255 ) NOT NULL ,
`Gender` VARCHAR( 255 ) NOT NULL ,
`Age` INT NOT NULL ,
`Donuts_eaten` INT NOT NULL
) ENGINE = MYISAM 

HTML form HTML表格

Note: <input type="text" name="Donuts_eaten"> - Donuts_eaten is not the same as donuts_eaten notice the lowercase d 注意: <input type="text" name="Donuts_eaten"> - Donuts_eatendonuts_eaten不同, donuts_eaten注意小写字母d

<form action="insert.php" method="post">
Name: 
<input type="text" name="name">
<br>
Gender: 
<input type="text" name="gender">
<br>
Age: 
<input type="text" name="age">
<br>
Donuts eaten: 
<input type="text" name="Donuts_eaten">
<br>
<input type="submit" name="submit" value="Submit">
</form>

PHP/SQL PHP / SQL

<?php
/* Your Database Name */
$dbname = 'dbname'; // change this

/* Your Database User Name and Passowrd */
$username = 'username'; // change this
$password = 'password'; // change this

$pdo = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "INSERT INTO stat (Name,
        Gender,
        Age,
        Donuts_eaten
        ) VALUES (
        :Name, 
        :Gender, 
        :Age, 
        :Donuts_eaten)";

$stmt = $pdo->prepare($sql);

$stmt->bindParam(':Name', $_POST['name'], PDO::PARAM_STR);       
$stmt->bindParam(':Gender', $_POST['gender'], PDO::PARAM_STR); 
$stmt->bindParam(':Age', $_POST['age'], PDO::PARAM_STR);
// use PARAM_STR although a number  
$stmt->bindParam(':Donuts_eaten', $_POST['Donuts_eaten'], PDO::PARAM_STR); 

// old execute
// $stmt->execute(); 
$stmt->execute(array(':Name' => $_POST['name'],':Gender' => $_POST['gender'],':Age' => $_POST['age'],':Donuts_eaten' => $_POST['Donuts_eaten']));
if($stmt != false) {
    echo "success!";
} else {
    echo "an error occured saving your data!";
}

?>

Original answer 原始答案

You need to wrap Donuts eaten in backticks (for your column name), due to the space. 由于空间原因,您需要将Donuts eaten包裹在反引号中(以列名表示)。

$sql = "INSERT INTO stat(Name,
        Gender,
        Age,
        `Donuts eaten`
        ) VALUES (
        :Name, 
        :Gender, 
        :Age, 
        :Donuts_eaten)";

Using spaces in column names is discouraged. 不建议在列名中使用空格。 Use an underscore instead for your table's column. 在表的列中使用下划线代替。

Also, change: 另外,更改:

$stmt = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
$stmt->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

to: 至:

$pdo = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

because you're using $pdo in $stmt = $pdo->prepare($sql); 因为您在$stmt = $pdo->prepare($sql);使用$pdo $stmt = $pdo->prepare($sql);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM