0

我有一个表单,其中包含两个字段,名称属性分别为“photo_title”和“photographer_name”,以及一个名为“photo_id”的隐藏字段。当用户按下提交按钮时,我希望它更新数据库中的两个单独的表。我可以让它更新一个表,但是一旦我尝试离开第二个表,它就不喜欢它。

我认为我的查询字符串或绑定可能有问题。如何在 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>
4

2 回答 2

2

这是一个答案,因此阅读此问题的人会看到它,而不是在上面的评论中找到它。我会标记这个 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 语法的文档是说明性的。

于 2009-06-15T05:47:01.227 回答
1

我正在做类似的事情。这是我做的几件事。希望能帮助到你

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

如果您想在不同的页面上使用 id,您甚至可以将您的 photo_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());}
?>
于 2020-04-10T16:46:17.757 回答