0

mysqlデータベースの更新クエリを作成しました。問題は、mysqlエラーが表示されていないことでも、行が更新されていることでもありません。my_sql_rowsは常にfalseを出力します。これは、私のタブで何も更新されていないことを意味します。コードは次のとおりです。

if(isset($_POST['update_subject']))
{  
    $id  = $_POST['id'];
    $menu_name  = $_POST['menu_name'];
    $visible  = $_POST['visible'];
    $position  = $_POST['position'];
    $content  = $_POST['content'];

    mysql_query("UPDATE subjects SET menu_name ='$menu_name', visible = $visible, position = $position,
                    content =    '$content'  WHERE id =  $id ")
                     or die("updation of '$menu_name' in table subjects failed due to : " . mysql_error ());
    if(mysql_affected_rows == 1 ) {
        echo "Updation of '$menu_name' in table subjects is done successfully !!! ";
    } else {
        echo "something went wrong. updation process is halted.";
    }   
}

「何かがうまくいかなかった。更新プロセスが停止している」というメッセージが常に返されます。mysqlコマンドが古くなっていることはわかっていますが、それでも学習したいと思います。ありがとう!

4

4 に答える 4

3

Ita は、関数の後に括弧が必要であることに加えて、if ステートメントに括弧を組み込まないというタブーの慣習を使用しているためです。

if(mysql_affected_rows() == 1 ){
    echo "Updation of '$menu_name' in table subjects is done successfully !!! ";
}
else{
    echo "something went wrong. updation process is halted.";
}
于 2013-02-19T19:42:32.813 に答える
2

mysql_affected_rowsは関数であるため、次のように括弧が必要です。

$result = mysql_query($yourquery);
if(mysql_affected_rows($result) === 1) {
  // logic
}

廃止予定のスパムを続けます...

ext/mysql新しいプロジェクトには使用しないでください:

この拡張機能は PHP 5.5.0 で非推奨になりました。将来的に削除されるため、新しいコードを書くことはお勧めしません。代わりに、mysqli または PDO_MySQL 拡張機能を使用する必要があります。MySQL API を選択する際のさらなるヘルプについては、MySQL API の概要も参照してください。

代わりに、mysqliまたはPDOmysql ドライバーを使用する必要があります。

于 2013-02-19T19:42:06.920 に答える
1

PDO +よりクリーンなコードでこれを実行したい場合は、次を試してください。

<?php
try {
    $db = new PDO("mysql:host=127.0.0.1;dbname=databasename", 'dbuser', 'dbpassword');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch (Exception $e){
    die('Cannot connect to mySQL server.');
}

if($_SERVER['REQUEST_METHOD']=='POST' && isset($_POST['update_subject'])){
    if(!empty($_POST['id'])){

        $sql = "UPDATE subjects SET menu_name = :menu_mame,
                                    visible   = :visible,
                                    position  = :position,
                                    content   = :content
                                WHERE id = :id";

        $update = array(':menu_name'=>$_POST['menu_name'],
                        ':visible'=>$_POST['visible'],
                        ':position'=>$_POST['position'],
                        ':content'=>$_POST['content'],
                        ':id'=>$_POST['id']);

        $query = $db->prepare($sql);
        $query->execute($update);

        $affected = $query->rowCount();

        if($affected > 0 ){
            echo htmlspecialchars($_POST['menu_name'])." updated successfully !!!";
        }else{
            echo "Something went wrong or no rows were found tobe updated";
        }
    }
}
?>
于 2013-02-19T19:53:12.493 に答える
1

いくつかのこと、

  1. UPDATE'列の値が文字列の場合、クエリはその値を引用符で囲む必要があります。ということでクエリを確認。

    mysql_query("UPDATE subjects SET menu_name ='$menu_name', visible = '$visible', position = '$position', content = '$content'  WHERE id =  '$id' ")
    
  2. mysql_affected_rowsは関数なので、そうでなければなりません。

    if(mysql_affected_rows() == 1 )
    

注: Mysql_* 拡張機能は非推奨です。可能であればMysqli、 またはを使用してください。PDO

于 2013-02-19T19:43:57.430 に答える