在PHP代码中使用“ INSERT INTO”语句不起作用

时间:2019-01-24 20:15:31

标签: php mysql sql mysqli

我正在尝试为一个有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 :(得分:2)

问题与@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);)。

答案 1 :(得分:0)

还要删除您不进行比较的三元组===,因此您不需要比较运算符,因此请使用!== FALSE

示例

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

所以这是说如果它不是FALSE,那么它是TRUE,所以它将继续运行。