[英]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.