如何使用mySQLi使用预准备语句更新多个表?

时间:2009-06-13 03:52:48

标签: php mysqli prepared-statement

我有一个包含两个字段的表单,其名称属性为“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>

2 个答案:

答案 0 :(得分: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语法的documentation是说明性的。

答案 1 :(得分: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());}
?>