我开始学习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>";
}
?>
答案 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_ *函数。