【问题标题】:Mysql update statement won't executeMysql更新语句不会执行
【发布时间】:2013-05-19 07:17:17
【问题描述】:

有人可以帮我解决这个问题吗?当我试图更新我的表时,什么也没有发生,我不知道出了什么问题。我尝试了不同的查询,但没有 1 个有效。

我的代码:http://pastebin.com/8zDpm0Ah 从第 23 行开始不起作用

<?php

foreach($db->query("SELECT * FROM blog WHERE ID LIKE '$ID'") as $row){

    echo "Titel: <input type='text' size='50' name='titel' value='$row[titel]'><br>";
    echo "Post:<br>";
    echo "<textarea name='editblog'>";
    echo $row[post];
    echo "</textarea>";

    echo "<input type='hidden' name='ID' value='";
    echo $row[ID];
    echo "'>";
}
?>

<input type="submit" value="Edit post" name="postedit">
</form>
<script>
CKEDITOR.replace( 'editblog' );
</script>
<?php

if(isset($_POST['postedit'])){
    $titel = $_POST['titel'];
    $post = $_POST['editblog'];
    $ID = $_POST['ID'];

    $STH = $db->prepare("UPDATE blog SET titel='$titel',post='$post' WHERE ID=$ID");  
    $STH->execute();
    echo "<h2>Post edited!</h2>";
}

【问题讨论】:

  • 你有什么错误?没有错误?
  • 确保将 id 传递到变量 $ID 中,如果变量在 where 子句中为空,则更新将不执行任何操作
  • 你能不能做一个 print_r($_POST) 这样我们才能真正看到一切是否按预期通过?
  • 对于这个查询:SELECT * FROM blog WHERE ID LIKE '$ID' 为什么使用 LIKE 而不是 '=' ?
  • 之前使用 = 但我真的尝试过改变任何东西让它工作。

标签: php mysql pdo


【解决方案1】:

如果您没有按预期使用准备好的语句(使用 $db-&gt;bind_params()),那么我建议将第 29 行切换到

$STH = $db->query("UPDATE blog SET titel='$titel',post='$post' WHERE ID=$ID");  

并删除第 30 行。

【讨论】:

  • 在准备好的语句中只能使用占位符,而不是变量。
  • 此语句不是预准备语句,它正在执行原始查询字符串。
【解决方案2】:

你根本使用参数化查询,切换到PDO,并不意味着只将mysql_query()改为$db-&gt;prepare(),还不止这些。使用 PDO 时,您不能将每个变量都放在查询中,我说的是这段代码:

$STH = $db->prepare("UPDATE blog SET titel='$titel',post='$post' WHERE ID=$ID");  
                                $STH->execute();

$title, $post and $id 的值需要在您的查询中替换为?,稍后可以执行。

所以,试试下面的方法:

if(isset($_POST['postedit'])) {
     $title = $_POST['titel'];
     $post = $_POST['editblog'];
     $id = $_POST['ID'];
    try {
    $STH = $db->prepare("UPDATE blog SET titel = ?, post = ? WHERE ID = ? ");  
    $STH->execute(array($title, $post, $id));
    } catch(PDOExeption $e){
     echo 'The error is: '. $e->getMessage();
    }
    if($STH->rowCount() > 0){
       echo 'data updated successfuly';
    }else{
       echo 'data updating failed';
    }
}

调试:

    <?php
    $title = 'I am post title';
    $post = 'I am POST';
    $id = '17';

    try {
    new PDO("mysql:host=localhost;dbname=addictus_db", "addictus_admin", "dikketetten");
    $STH = $db->prepare("UPDATE blog SET titel = ?, post = ? WHERE ID = ? ");  
    $STH->execute(array($title, $post, $id));
    } catch(PDOExeption $e){
     echo 'The error is: '. $e->getMessage();
    } 

【讨论】:

  • @YoshiPeters 您是否复制并替换为您拥有的代码?
  • 好的,刚刚更新了。现在,确保 1 您正在发布这三个字段,并且 2 您的 $db 不为空。它应该类似于$db = new PDO('mysql:host=localhost; dbname=xxxx', 'xxx', 'xxx') 当然,xxx 应该替换为您的实际数据库名称、用户、密码。再试一次@YoshiPeters
  • $db = new PDO("mysql:host=localhost;dbname=addictus_db", 'addictus_admin', 'dikketetten');这是我的 $db,我很确定我会发布所有 3 件事。
  • 坚持使用'single quotes'"double quotes",您将在数据库中混合两者
  • 我复制粘贴了整段代码并替换了它,它什么也没做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多