PHP / MYSQL更新多表并且无法更新数据:查询为空

时间:2016-12-14 08:25:04

标签: php mysql updating

我开始学习PHP,为自己创造了一个很好的方式(不是为了PHP世界)但我无法成功更新信息部分..我有关于更新multiptle表的问题,并继续收到这个错误的错误:无法更新数据:查询为空。

我搜索了很多,一直在与之斗争一周,并试图尽我所能,但没有结果。这就是我在这里发帖的原因。顺便说一下,我知道我的代码既不是完整的PDO也不是MYSQLI,但我也在努力学习和实现它们。

我现在有3张桌子:学生 - LessonsBought - 付款。

1)students_id是与其他表格中的students_id结合使用的。

2)students_id是一个带有lessonsbought_id和payments_id的外键 (InnoDB的)

这是我的代码:

<?php

$servername = "localhost";
$username = "MY-DB-USERNAME";
$password = "MY-DB-PASSWORD";
$dbname = "MY-DB-NAME";
$conn = mysql_connect($servername, $username, $password, $dbname);

if(isset($_POST['update']))
{


$students_name = $row['students_name'];
$students_phone = $row['students_phone'];
$students_email = $row['students_email'];
$students_grade = $row['students_grade'];
$students_reg_date = $row['students_reg_date'];

$lessonsbought_type = $row['lessonsbought_type'];
$lessonsbought_hour = $row['lessonsbought_hour'];

$payment_total = $row['payment_total'];
$payment_method = $row['payment_method'];
$payment_done = $row['payment_done'];
$payment_waiting = $row['payment_waiting'];

$students_id = $_GET["id"];


$sql = mysql_query("UPDATE students,lessonsbought,payment SET
students_name = '$students_name', students_phone = '$students_phone', 
students_email = '$students_email', students_grade = '$students_grade', 
students_reg_date = '$students_reg_date', 
lessonsbought_type= '$lessonsbought_type', 
lessonsbought_hour='$lessonsbought_hour',payment_total='$payment_total', 
payment_method = '$payment_method', payment_done='$payment_done', 
payment_waiting = '$payment_waiting', WHERE students_id = 
'$students_id'");

$retval = mysql_query( $sql, $conn );
if(!$retval )
{
die('Could not update data: ' . mysql_error());
}

echo "Updated data successfully\n <font color='green'>
<b>Record deleted successfully</b><font><br />
<a class='buttons'  href='/result.php'>Turn Back To Result Page</a>";

}

?>

2 个答案:

答案 0 :(得分:0)

我已经使用了一些代码并将其添加到PDO中,因此您可以看到应该如何执行此操作。在这种情况下,一旦输入所有字段,它也会起作用;

首先,设置一个数据库连接文件:

class Database
{
    private $host = "localhost";
    private $db_name = "dbname";
    private $username = "user";
    private $password = "pass";
    public $conn;

    public function dbConnection()
    {

        $this->conn = null;
        try
        {
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        catch(PDOException $exception)
        {
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;
    }
}

然后,我也会创建一个DBCommon文件。您需要确保require_once数据库连接文件:

class DBCommon
{
    private $conn;

    /** @var Common */
    public $common;

    public function __construct()
    {
        $database = new Database();
        $db = $database->dbConnection();
        $this->conn = $db;
    }

    public function runQuery($sql)
    {
        $stmt = $this->conn->prepare($sql);
        return $stmt;
    }
}

然后你需要上课,所以对于这个,例如,班级学生;

class student extends DBCommon
{
    public function __construct()
    {
        parent::__construct();
    }

    public function updateStudent($name, $phone, $email, $grade)
    {
        $userid = $_SESSION['user_session'];
        $stmt = $this->runQuery("UPDATE `tablename` SET `students_name` = :sname, `students_phone` = :phone, `students_email` = :email, `students_grade` = :grade WHERE `students_id` = :sid");
        $stmt->bindParam(array(':sname' => $name, ':phone' => $phone, ':email' => $email, ':grade' => $grade, ':sid' => $userid));
        $stmt->execute();

        echo "Your Records have now been updated.";
    }
}

您可以在这些周围添加try / catch块以传回错误消息。

然后在您的表单文件中,您需要包含classes文件,然后创建类,然后形成触发器,以便在按下提交按钮时运行代码:

require_once ('class.file.php');

$class = new student();

if (isset($_POST['update']))
{
 $class->updateStudent($_POST['name'], $_POST['phone'], $_POST['email'], $_POST['grade']);
}

我知道这并没有准确地告诉你你做错了什么,但你做的主要错误是通过MySQL_消失了。这种方式更清洁有效。

P.S。永远绑定你的params永远不要在你的查询中使用'{$var}'因为你将受到漏洞的攻击。<​​/ p>

答案 1 :(得分:0)

首先你必须选择数据库

mysql_select_db("database_name");

其次使用单独的更新查询来更新不同的表

第三,你在另一个mysql_query中调用mysql_query。 你的sql变量只是查询。如下所示

$sql="UPDATE students SET students_name = '$students_name', students_phone = '$students_phone' WHERE students_id = '$students_id'";

最后请停止使用mysql_ *函数。