INSERT INTO ничего не пишет в базе данных - PullRequest
0 голосов
/ 18 января 2019

По сути, мы пытаемся добавить некоторые значения в базу данных. Мы делаем это с помощью команды 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), тогда оно должно быть вставлено в нашу таблицу с именем temp в столбце "valeur". Вместо этого он ничего не пишет.

Редактировать: Мы используем PHP версии 5.6.19 и MySQL 5.7.11 и WAMPserver

EDIT2: я наконец-то решил проблему, хотя понятия не имею, как. Php выглядит весело

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Поскольку вы используете PDO, имеет смысл использовать некоторые его сильные стороны - в первую очередь в этом случае prepared statements и bound parameters, чтобы сделать SQL намного безопаснее от злоумышленников. Если вы отделяете соединение с базой данных от оставшегося кода, у вас есть соединение с базой данных, которое можно быстро и легко использовать в другом месте, просто включив его во время выполнения, поэтому первым фрагментом кода ниже может быть файл соединения db.

(я вижу, что вы сами решили проблему перед публикацией этого сообщения ...)

<?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() ) );
    }

?>
0 голосов
/ 18 января 2019

Вы должны назначить переменную для запроса SQL для цели отладки.
И эхо, чтобы напечатать, как ваша строка запроса. После этого вы вставляете свой $ query во вкладку SQL на Phpmyadmin, чтобы узнать, в чем ваша ошибка.

$ query = "INSERT INTO temp (valeur) VALUES ('. $ _ GET [' temp1 '].')";
echo $ query;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...