использование оператора INSERT INTO в коде php не работает - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь создать базу данных для книжного магазина с 3 таблицами: книга, том и публикация.

версия 2: я мог внести некоторые исправления в свой код и базу данных благодаря предыдущим ответам, и этот работает.

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

//connect to db
$conn = mysqli_connect("localhost","root","");
$dbcon = mysqli_select_db($conn,"ershadbookstore");
if ( !$conn ) {
    die("Connection failed : " . mysqli_error());
} 
if ( !$dbcon ) {
    die("Database Connection failed : " . mysqli_error());
}

#new recoed: if the new record is inserted into book successfully, another new record is inserted into volume table. the same goes for volume and phblication table. at the end the total number of this volumn is editted in the rows with the same isbn.
$sql = "INSERT INTO Book (name, vnum, writer, translator, pulisher, genre, format)
        VALUES ('test', 'test', 'test', 'test', 'test', 'test', 'test')";
if (mysqli_query($conn, $sql)) {
        $isbn="3";
        $sql =  "INSERT INTO Volume (isbn, bid, vnum, note, image)
                VALUES ('".$isbn."', '".mysqli_insert_id($conn)."', 'test', 'test', 'test')";
        if (mysqli_query($conn, $sql)) {
            $sql =  "INSERT INTO Publisher (isbn, pubnum, pyear, circulation, fpyear, pagenum, price, num)
                    VALUES ('".$isbn."', 'test', 'test', 'test', 'test', 'test', 'test', 'test')";
            if (mysqli_query($conn, $sql)) {
                $totalnum=0;
                $sql= "SELECT num FROM Publisher
                        WHERE (isbn = '".$isbn."')";
                $query= mysqli_query($conn, $sql);
                while($row = mysqli_fetch_array($query)){
                    $totalnum += $row['num'];
                }
                $sql1= "UPDATE Volume
                        SET tnum = '".$totalnum."'
                        WHERE isbn = '".$isbn."'";
                if (mysqli_query($conn, $sql1))
                {
                    echo "true";
                }
                else
                {
                    return "Error publisher table(tnum): " . $sql1 . "<br>" . mysqli_error();
                }                   
            }
            else{
                return "Error publisher table: " . $sql . "<br>" . mysqli_error();
            }
    }
    else {
        return "Error for volume table: " . $sql . "<br>" . mysqli_error();
    }
}
else {
    return "Error for book table: " . $sql . "<br>" . mysqli_error();
}

mysqli_close($conn);
?>

версия 1: я использую mysqli (), и код не работает и не отображает никаких ошибок.

<?php
//connect to db
$conn = new mysqli("localhost", "root", "", "ershadbookstore");
if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
#new recoed: if the new record is inserted into book successfully, another new record is inserted into volume table. the same goes for volume and phblication table. at the end the total number of this volumn is editted in the rows with the same isbn.
$sql = "INSERT INTO Book (name, vnum, writer, translator, publisher, genre, format)
        VALUES ('test', 'test', 'test', 'test', 'test', 'test', 'test')";
if ($conn->query($sql) === TRUE) {
        $last_bid = $conn->insert_id;
        $sql =  "INSERT INTO Volume (isbn, bid, vnum, note, image)
                VALUES ('test', 'test', 'test', 'test', 'test')";
        if ($conn->query($sql) === TRUE) {
            $sql =  "INSERT INTO Publication (isbn, pubnum, pyear, circulation, fpyear, pnum, price, num)
                    VALUES ('test', 'test', 'test', 'test', 'test', 'test', 'test', 'test')";
            if ($conn->query($sql) === TRUE) {
                $sql= "SELECT SUM(num) FROM Publication
                        WHERE (isbn='test')";
                if ($conn->query($sql) === TRUE) {
                    $totalNum=$conn->query($sql);
                    $sql1= "UPDATE Volume
                            SET (tnum = test)
                            WHERE (isbn= test)";
                    if ($conn->query($sql1) === TRUE)
                    {
                        echo "true";
                    }
                    else
                    {
                        return "Error publication table: " . $sql1 . "<br>" . $conn->error;
                    }
                }                           
            }
            else{
                return "Error publication table: " . $sql . "<br>" . $conn->error;
            }
    }
    else {
        return "Error for volume table: " . $sql . "<br>" . $conn->error;
    }           
}
else {
    return "Error for book table: " . $sql . "<br>" . $conn->error;
}           
$conn->close();
?>

спам: поскольку этот пост в основном представляет собой код, я не могу отправить его, пока не добавлю спам или не удалю некоторые части своего кода, а второй вариант просто усложнит все.

Ответы [ 2 ]

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

Проблема точно такая, как описал @PHPnoob, но он не указал, где и почему.

Как сказано в руководстве по PHP:

Возвращает FALSE при ошибке. Для успешных запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query () вернет объект mysqli_result. Для других успешных запросов mysqli_query () вернет TRUE.

Хотя проверка ошибок будет работать для запросов INSERT или UPDATE, запрос SELECT не вернет true. На самом деле такая проверка для логических значений совершенно не нужна.

Снимите флажок для === TRUE, и ваш код должен работать нормально.

$sql= "SELECT SUM(num) FROM Publication
        WHERE (isbn='test')";
if ($conn->query($sql)) { // removed === TRUE
    $totalNum=$conn->query($sql);
    $sql1= "UPDATE Volume
            SET (tnum = 'test')
            WHERE (isbn= 'test')";
    if ($conn->query($sql1))
    {
        echo "true";
    }
    else
    {
        return "Error publication table: " . $sql1 . "<br>" . $conn->error;
    }
}  

Кроме того, в ваших значениях в последних запросах на обновление отсутствуют кавычки.

SET (tnum = 'test')
WHERE (isbn= 'test')";

Также нет необходимости дважды выполнять запрос SELECT, чтобы получить значения. Вы должны реорганизовать свой код, чтобы второй запрос ($totalNum=$conn->query($sql);) не был необходим.

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

Также удалите тройные равные ===, которые вы не сравниваете, поэтому вам не нужен оператор сравнения, поэтому вместо этого используйте !== FALSE

Пример

if ($conn->query($sql) !== FALSE) 

так что это говорит о том, что если он не FALSE, чем его ИСТИНА, то он продолжит работать.

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