2016-12-14 9 views
0

私はPHPを学び始めました。自分自身にとって素晴らしい方法を作りましたが(PHPの世界ではありません)、情報の更新は成功できません。マルチプルテーブルを更新し、この素晴らしいエラーを受け取り続ける:データを更新できませんでした:クエリが空でした。PHP/MYSQLマルチテーブルの更新とデータの更新ができませんでした。クエリが空でした

私はたくさんの検索をしてきましたが、1週間はそれと戦っていて、ベストを尽くそうとしましたが結果はありませんでした。だから私はここに投稿している。ところで、私のコードはPDOでもMYSQLIでもないことを知っていますが、私もそれらを学び実装するために全力を尽くしています。

私は今、3つのテーブルを持っています:学生 - LessonsBought - Payments。

1)students_idは他のテーブルのstudents_idと結合されたものです。

2)students_idはlessonsbought_idと外部キーであるとpayments_id (InnoDBは)ここで

が私のコードです:私はそうすることができますPDOにそれをあなたのコードの一部を撮影して、コメントを追加しています

<?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>"; 

} 

?> 
+1

PHPを学び始めたばかりの方でも、mysql_ *をすぐにPDOにジャンプしないでください。これは完全で完全な時間の無駄です。 – e4c5

+0

mysql_queryのドキュメントhttp://php.net/manual/en/function.mysql-query.phpを見て、2回mysql_queryを呼び出しました。良い方法で最初のもの、2番目のもの1つは間違った引数を持つ。 2番目のmysql_query呼び出しを削除してください。 – Yoleth

+0

@ Yoleth「あなたの2番目のmysql_queryを削除する」とはどういう意味ですか?私はインターネット上の多くの場所でこの答えを見てきましたが、それが何であるかを知ることができませんでした。 – demyr

答えて

0

どのようにこれを行う必要があります参照してください。この例では、すべてのフィールドが入力された後でも動作します。私もDBCOMMONファイルを作ると思います、そして、

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; 
    } 
} 

はまず、データベース接続ファイルを自分で設定します。あなたは、データベースファイルを接続する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; 
    } 
} 

はその後あなたがこの1のために、それは例えば、クラスの生徒になるだろうので、あなたのクラスを作成する必要があります。

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ブロックを追加することができます。

require_once ('class.file.php'); 

$class = new student(); 

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

I:あなたが以下のように、送信ボタンを押したときに

その後、あなたのフォームファイル内あなたは、クラスファイルをインクルードして、クラスを作成し、実行するコードのためのあなたのトリガを形成する必要があるだろうあなたが間違っていたことを正確には伝えていないことを知っていますが、あなたがやった大きな間違ったことはMySQL_を経由しています。この方法は、よりクリーンで効果的な方法です。

P.S.脆弱性の影響を受けるので、常に'{$var}'を使用しないであなたのパラメータをバインドしてください。

0

最初のあなたは

第三に、あなたが他のmysql_query内のmysql_query呼んでいる別のテーブルを更新するために、個別の更新クエリを使用し、第二のデータベース

mysql_select_db("database_name"); 

を選択する必要があります。 あなたのSQL変数は単にクエリになります。以下に示すように

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

最後に、mysql_ *関数の使用をやめてください。

関連する問題