【问题标题】:How to insert values into a mysql database using php如何使用php将值插入mysql数据库
【发布时间】:2015-06-30 06:51:25
【问题描述】:

我需要帮助了解如何将值插入 mysql 数据库。我知道我需要为从用户那里获得的数据编写一个 INSERT 语句。但我真的不明白在哪里放置这个插入语句以及如何让它运行。我使用 pg_prepare 和 pg_execute 吗?如果有人可以帮助我将代码设置为运行插入语句的位置,我将不胜感激!提前感谢您的帮助。

HTML 代码

<!DOCTYPE html>
<html>
<body>

<form method="POST", action="Blast.php">
<select id="database" name="database" value='Select a Database'>
    <option value="UniprotKB">UniProtKB</option>
    <option value="GenBank">GenBank</option>
    <option value="RelSeq">RelSeq</option>
</select>
<select id="evalue" name="evalue" value='Select evalue'>
    <option value="0.0001">0.0001</option>
    <option value="0.001">0.001</option>
    <option value="0.01">0.01</option>
    <option value="0.1">0.1</option>
    <option value="1">1</option>
    <option value="10">10</option>
    <option value="100">100</option>
    <option value="1000">1000</option>
</select>

<input id="BlastSearch" type="text" name="BlastSearch" value='' />
<input type='submit' name='submit' value='Run BLAST' />
<button type="reset" value="Clear">Clear</button>

</form>

所以基本上有3个值是用户插入的,我想在按下提交按钮时将它们全部插入数据库!

PHP 代码

<?php
    require_once '../secure/database.php';
    $mysqli = new mysqli($dbhost,$dbuser,$dbpass,$dbname);

    if($mysqli->connect_error){
            exit('CON Error: ' . $mysqli->connect_errno . ' ' . $mysqli->connect_error);
    }

 $db = $_POST['database'];
 $evalue = $_POST['evalue'];
 $sequence = $_POST['BlastSearch'];


    print "Connected! Host info: " . $mysqli->host_info . "<br>\n";
    $mysqli->close();

?>

【问题讨论】:

标签: php mysql sql database insert


【解决方案1】:
$dsn = 'mysql:host=localhost;dbname=your_db_name';
$username = 'username';
$password = 'password';
$pdo = new PDO($dsn, $username, $password, $options);
$stm = $pdo->prepare('INSERT INTO table (col1, col2, col3) VALUES (?,?,?)');
$stm->execute(array($col1_value, $col2_value, $col3_value));

就这么简单。

【讨论】:

  • 我可以只使用 pg_prepare 和 pg_execute 吗?
  • @ryanlizarga 不,你不能使用任何 pg_* 函数,除非你使用的是 PostgreSQL 数据库,但是从你标记的帖子来看,据我所知你正在使用 MySQL? PDO 可以与 PostgreSQL 和 MySQL(以及许多其他)一起使用。我建议你使用 PDO。
  • @hedi 和 ishas。我已经在我的 php 代码中连接到我的数据库。我还需要重新连接吗?
  • @ryanlizarga 不,您只需要查询数据库。 php.net/manual/en/mysqli.query.php
【解决方案2】:

基本上你必须做两个步骤:

(1) 设置您的连接,(2) 选择您的数据库并运行您的 INSERT。

$mysqli = new mysqli("localhost", "my_user", "my_password", "database");
$mysqli->query("INSERT INTO ...");

【讨论】:

  • 所以在我的代码中我已经连接到数据库。我很困惑,因为每个人都告诉我我需要连接。我需要重新连接吗?
  • 不,你需要做的是用你的 $_POST['database'] 替换 $dbname 变量,然后你可以运行 $mysqli->query();
  • 来自 POST['database'] 的变量实际上并不是您用来从中获取信息的数据库。它与程序本身有关。基本上有 2 个库可供用户选择使用。
  • 所以只需使用 $mysql->query() ... 运行 INSERT ... :)
【解决方案3】:
    /*
 * SQL
 CREATE TABLE `NewTable` (
`id`  int NOT NULL AUTO_INCREMENT ,
`col1`  varchar(255) NOT NULL ,
`col2`  varchar(255) NOT NULL ,
`col3`  varchar(255) NOT NULL ,
PRIMARY KEY (`id`)
)
;


 * 
 * /SQL
 */

 $mysqli = new mysqli("localhost", "DB_USERNAME", "DB_PASSWORD", "DB_NAME");
    if($mysqli->connect_error)
    {
      die('Connect Error' . $mysqli->connect_error);
    } 
$mysqli->query("SET NAMES 'utf8'");
$mysqli->query("SET CHARACTER SET 'utf8'");
$mysqli->query("SET COLLATION_CONNECTION='utf8_general_ci'");
$mysqli->query("SET character_set_results = 'utf8'");
$mysqli->query("SET character_set_server = 'utf8'");
$mysqli->query("SET character_set_client = 'utf8'");
//connection  END
if(isset($_POST['database']) and isset($_POST['evalue']) and isset($_POST['BlastSearch'])){
     $db = htmlspecialchars(strip_tags($_POST['database']));
    $evalue = htmlspecialchars(strip_tags($_POST['evalue']));
    $sequence = htmlspecialchars(strip_tags($_POST['BlastSearch']));
$mysqli->query("INSERT INTO TABLE_NAME (col1,col2,col3) VALUES('$db','$evalue','$sequence')");
}

【讨论】:

  • $mysqli->query("SET NAMES 'utf8'"); $mysqli->query("SET CHARACTER SET 'utf8'"); $mysqli->query("SET COLLATION_CONNECTION='utf8_general_ci'"); $mysqli->query("SET character_set_results = 'utf8'"); $mysqli->query("SET character_set_server = 'utf8'"); $mysqli->query("SET character_set_client = 'utf8'");这些有什么作用?
  • 这并不能阻止问题所在的 SQL 注入。
  • 明白了。你能解释一下他们实际上做了什么吗?如果我不包括它们会有什么影响?
【解决方案4】:

你可以试试这个:

<form action="send.php" method="post" enctype="multipart/form-data">
                <table>
                    <tr>
                        <td>Value1:</td>
                        <td><input type="text" name="value1" required><br></td>
                    </tr>

                    <tr>
                        <td>value2:</td>
                        <td><input type="text" name="value2" required><br></td>
                    </tr>
                    <tr>
                        <td>value3:</td>
                        <td><input type="text" name="value3" required><br></td>
                    </tr>
                </table>
</form>

现在在 send.php 上你有这个:

<?php
        require 'database.php';

        //information is send to the database//
        $add_info= $database->information();
?>

这个类在你的 database.php 中,看起来像这样:

    <?php
    class database {
    private $pdo;

    public function __construct() {
        // Connection information
        $host = 'urhostname';
        $dbname = 'dbname';
        $user = 'username';
        $pass = 'password';

        // Attempt DB connection
        try
            {
                $this->pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
                $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                //echo 'Successfully connected to the database!';
            }
                catch(PDOException $e)
            {
                echo $e->getMessage();
            }
        }



    function information() {
                $sql = "INSERT INTO tablename"
            . "(value1, value2, value3)"
            . "VALUES (:value1, :value2, :value3) ";
                $sth = $this->pdo->prepare($sql);
                $sth->bindParam(':value1', $_POST['value1'], PDO::PARAM_STR);
                $sth->bindParam(':value2', $_POST['value2'], PDO::PARAM_STR);
                $sth->bindParam(':value3', $_POST['value3'], PDO::PARAM_STR);
                $sth->execute();
        }
}

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多