簡體   English   中英

如何使用帶有 mySQLi 的准備好的語句更新多個表?

[英]How do I update multiple tables using prepared statements with mySQLi?

我有一個包含兩個字段的表單,名稱屬性為“photo_title”和“photographer_name”,以及一個名為“photo_id”的隱藏字段。 當用戶按下提交按鈕時,我希望它更新數據庫中的兩個單獨的表。 我可以讓它更新單個表,但是一旦我嘗試 leftjoin 第二個表,它就不喜歡它。

我認為我的查詢字符串或綁定可能有問題。 如何在仍然使用准備好的語句的同時更新 Mysql 數據庫中兩個單獨表中的兩個單獨值?

這是PHP:

if (array_key_exists('update', $_POST)) { 

$sql = 'UPDATE photos SET photos.photo_title = ?, photographers.photographer_name = ?
    LEFT JOIN photographers ON photos.photographer_id = photographers.photographer_id
    WHERE photo_id = ?';

$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) { 
    $stmt->bind_param('ssi', $_POST['photo_title'], $_POST['photographer_name'], $_POST['photo_id']);       
    $done = $stmt->execute();
    }
}

這是表格:

<form id="form1" name="form1" method="post" action="">
   <input name="photo_title" type="text" value=""/>
   <textarea name="photographer_name"></textarea>

   <input type="submit" name="update" value="Update entry" />
   <input name="photo_id" type="hidden" value="<?php echo $photo_id ?>"/>
</form>

這是一個答案,因此閱讀此問題的人可以看到它,而不是在上面的評論中找到它。 我會標記這個 CW,這樣我就不會得到任何分數。

UPDATE photos LEFT JOIN photographers 
  ON photos.photographer_id = photographers.photographer_id 
SET photos.photo_title = ?, photographers.photographer_name = ? 
WHERE photos.photo_id = ?

FWIW,MySQL 的 UPDATE 語法的文檔是說明性的。

我正在做類似的事情。 這是我做的一些事情。 希望能幫助到你

if (isset($_POST['update'])) {
    $id=intval($_GET['photo_id']);
    $photo_title=$_POST['photo_title'];
    $photographer_name=$_POST['photographer_name'];

    $sql = "update photos p, photographers pg set p.photo_title=:photo_title, pg.photographer_name=:photographer_name where p.photographer_id=$id and pg.photographer_id=$id";

    $query = $dbh->prepare($sql);
    $query->bindParam(':photo_title',$photo_title,PDO::PARAM_STR);
    $query->bindParam(':photographer_name',$photographer_name,PDO::PARAM_STR);
    $query->execute();
}

您甚至可以將您的 photo_id 添加到表單操作中,以防您想在不同的頁面上使用該 ID。

<form id="form1" name="form1" method="post" action="index.php?id=<?php echo $photo_id;?>">
    <input name="photo_title" type="text" value=""/>
    <textarea name="photographer_name"></textarea>
    <input type="submit" name="update" value="Update entry" />
</form>

我有一個我創建的文件,它連接到我命名為 config 的數據庫,該文件具有以下代碼。 將此代碼包含在表單位於頂部的代碼中,這樣您就不會在執行上述代碼時出錯。

<?php
    // DB credentials.
    define('DB_HOST','localhost');
    define('DB_USER','root');
    define('DB_PASS','');
    define('DB_NAME','photographer');
    // Establish database connection.
    try{
        $dbh = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER, 
        DB_PASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
        }
    catch (PDOException $e){
        exit("Error: " . $e->getMessage());}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM