INSERT INTO不会在数据库中写入任何内容

时间:2019-01-18 08:50:03

标签: php mysql database

基本上,我们正在尝试在数据库中添加一些值。我们正在使用GET命令来获取名为“ valeur”的值,并将其写入数据库中。但是它不起作用,这些值不会添加到数据库中

<?php
try
{ // connection a la base de donnees
// connection to mySQL
$bdd = new

PDO('mysql:localhost;dbname=test1', 'root', '');

}

catch(Exception $e) //in case of error, display it and stop everything

{
die('Erreur : '.$e->getMessage()); 
}

if (isset($_GET['temp1'])) // test if the variable exists

{

$_GET['temp1'] = floatval($_GET['temp1']); 

echo ('donnee ' .$_GET["temp1"]. ' en cours d\'ecriture</br>');

$bdd->exec('INSERT INTO temp (valeur) VALUES('.$_GET["temp1"].')');

echo ('donnee ' .$_GET['temp1']. ' ecrite!');
}
?>

如果我们在http://localhost/test1/add.php?temp1=(thevalue)中放入一个值(在我们的情况下),则应将其插入到“ valeur”列中名为temp的表中。相反,它什么也没写。

编辑:我们正在使用PHP 5.6.19版,MySQL 5.7.11版和WAMPserver

EDIT2:尽管我不知道如何解决,但我终于解决了这个问题。 php看起来很有趣

2 个答案:

答案 0 :(得分:0)

您应该为用于调试目标的SQL查询分配一个变量。
并回显打印查询字符串如何。然后,将您的$ query粘贴到Phpmyadmin的“ SQL”选项卡中,以了解您的错误。

  

$ query =“将值插入临时(价)VALUES('。$ _ GET ['temp1']。')”;
   回声$ query;

答案 1 :(得分:0)

在使用PDO时,有必要利用它的一些优势-主要是在这种情况下,prepared statementsbound parameters使sql对恶意用户更加安全。 如果将数据库连接与其余代码分开,则可以通过在运行时将其包含在数据库连接中而在其他地方快速轻松地使用它,因此下面的第一段代码可以是数据库连接文件。

(我看到您在发布此信息之前已经解决了这个问题...)

<?php
    /*******************
        dbo-conn.php
    */
    try{

        $options=array( 
            PDO::ATTR_CURSOR                    =>  PDO::CURSOR_SCROLL,
            PDO::ATTR_PERSISTENT                =>  false,
            PDO::MYSQL_ATTR_USE_BUFFERED_QUERY  =>  true,
            PDO::ATTR_EMULATE_PREPARES          =>  true,
            PDO::MYSQL_ATTR_INIT_COMMAND        =>  'SET NAMES \'utf8mb4\' COLLATE \'utf8mb4_general_ci\', @@sql_mode = STRICT_ALL_TABLES, @@foreign_key_checks = 1'
        );
        $dbuser='root';
        $dbpwd='';

        $bdd=new PDO( 'mysql:host=localhost;dbname=test1;port=3306;charset=UTF8', $dbuser, $dbpwd, $options );


    }catch( PDOException $e ){
        exit( $e->getMessage() );
    }
?>


On the page that does the database inserts


<?php

    try{

        # test that the variable is set and available...
        if( !empty( $_GET['temp1'] ) ){

            # rudimentary check for number
            if( !is_numeric( $_GET['temp1'] ) )throw new Exception( sprintf( 'Supplied parameter "%s" does not appear to be a number', $_GET['temp1'] ) );

            $valeur = $_GET['temp1'];


            # include the db connection
            # the path used here depends where the file `dbo-conn.php` is saved
            # - this assumes the same directory 
            require 'dbo-conn.php';

            # generate sql & prepared statement
            $sql='insert into `temp` ( `valeur` ) values ( :valeur )';
            $stmt = $bdd->prepare( $sql );

            # check the prepared statement was created ok before attempting to execute it
            if( !$stmt ) throw new Exception( 'Failed to prepare sql "INSERT" query' 

            # bind the placeholder to the supplied user input
            $stmt->bindParam( ':valeur', $valeur, PDO::PARAM_STR );

            # commit the query
            $result = $stmt->execute();

            if( !$result )throw new Exception( 'oops! something went wrong' );

            # display a message to the user
            printf('donnee %s ecrite!', $valeur );
        }

    }catch( Exception $e ){
        exit( sprintf( 'Erreur: %s', $e->getMessage() ) );
    }

?>