2

史上初のスタックオーバーフローの質問!

FUNCTION : INSERT を許可する前にデータが存在するかどうかを確認する - 重複を避けようとしているタイトルは特定のアーティスト ID (以下で説明) に対してのみであるため、大文字と小文字を区別せず、可能な限りオープンにしようとしています。

テーブルの行構造は次のとおりです。

  • id (auto_increment)
  • アーティスト (そのアーティストだけに割り当てられた特定の ID 番号)
  • タイトル(このアーティストだけの重複を避けるためのもの

問題 :データベースから必要なデータを取得できないか、定義済みのエラーが発生しました。if ステートメントが間違っている可能性があります = 未知の問題

$_POST['タイトル']; ユーザー入力から渡されます

            if (isset($submit)) {
                $date = date("Ymd");
                $cleanTitle =  $_POST['title'];
                $querytitle = mysql_real_escape_string($_POST['title']);
                $queryalbum = mysql_real_escape_string($_POST['album']);

                // Check to see if Title exist for specfic Artist
                $checkTitle = mysql_query("SELECT * from lyrics WHERE artist = '$artist'");
                if (!$checkTitle) {
                    die('Query Failed');
                } 
                if ($checkTitle == $cleanTitle)  {
// do whatever
}
                print_r($checkTitle); // the data returned from the query

UPDATE : INSERT IGNORE は機能しません $artist を介してデータを挿入しているため、最初にそのアーティストにタイトルが存在するかどうかを確認する必要があります。または私が間違っているかもしれません。$artist は、コードの上位に定義された特定の ID 番号です

4

2 に答える 2

0

あなたのコードは間違っていましたが、これはうまくいくはずです:

if (isset($submit)) {
    $date = date("Ymd");
    $cleanTitle =  $_POST['title'];
    $querytitle = mysql_real_escape_string($_POST['title']);
    $queryalbum = mysql_real_escape_string($_POST['album']);
    // !!! $artist is not actually set anywhere here..
    $checkTitle = mysql_query("SELECT * from lyrics WHERE artist = '$artist'");
    if (!$checkTitle) {
        die('Query Failed');
    } 
    /* now that you have run the query, you need to get the result: */
    // (This is assuming your query only returns one result)//
    $result = mysql_fetch_array($checkTitle);
    // now check the value for 'title'
    if ($result['title'] == $cleanTitle)  {
        // do whatever
    }
    print_r($result); // the data returned from the query
}

クエリを実行していましたが、クエリの結果を取得していませんでした。結果を得るために使用mysql_fetch_array()します。複数のエントリの結果を取得するには、次を使用できます。

// will print the 'title' for each results
while ($row = mysql_fetch_array($checkTitle)) {
    echo $row['title'];
}

以上のことから、mysql_* は非推奨プロセスを経ており、mysqli または PDO に置き換える必要があることを知っておく必要があります。以下をお読みください。

mysql_*新しいコードで関数を使用しないでください。それらはもはや維持されておらず、 非推奨プロセスが開始されています。赤いボックスが か? 代わりに プリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。PDO を選択する場合は、ここに良いチュートリアルがあります。

于 2012-11-07T03:42:45.513 に答える
0

そのタイトルに投稿があるかどうかを確認するための非常に単純なコードを次に示します (最初に、ファイルに wp-blog-header.php が必要であることは既にご存じかもしれません)。

$title = 'mytitlee';

global $wpdb;
$id_ofpost_name = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = $title");
$id_ofpost_title = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = $title");
if ($id_ofpost_name || $id_ofpost_title) {echo 'Exists, here is the id:'.$id_ofpost_title.$id_ofpost_name;} 
else {echo 'post wasnt found';}
于 2013-04-10T12:33:47.830 に答える