0
 if ($word != '' && $text != '') {
    $result = $conn->query("SELECT * FROM variables WHERE `word` = '$word'");
    if ($source = $result->fetch_assoc()) {
        $conn->query("UPDATE variables SET `text` = '$text' WHERE `word` = '$word'");
        echo 0;
    } else {
        if ($result = $conn->query("INSERT INTO variables (`word`, `text`) VALUES ('$word', '$text')"))
            echo 1;
    }
}

上記はINSERTコード(および更新)です。UPDATEコードは正常に機能しますが、INSERTクエリが呼び出されるとクエリが返されますtrueが、データを確認しても挿入されていません。

よろしくお願いします。

編集:

変数テーブル構造:

`word` varchar(100) NOT NULL, //also PRIMARY KEY
`text` text NOT NULL
4

3 に答える 3

1

あなたは状態でシングル=を持っていifます。

たぶんあなたが望んでいた:

if ($result->num_rows){ // see if there are any rows
    $conn->query("UPDATE variables SET `text` = '$text' WHERE `word` = '$word'");
    echo 0;
} else {
    $conn->query("INSERT INTO variables (`word`, `text`) VALUES ('$word', '$text')");
    echo 1;
}

テスト済み:

$conn = new mysqli('localhost', 'root', '', 'test');
$word = 'word1';
$text = 'text1';

$result = $conn->query("SELECT * FROM variables WHERE `word` = '$word'");
if ($result->num_rows){
    $conn->query("UPDATE variables SET `text` = '$text' WHERE `word` = '$word'");
    echo 0;
} else {
    $conn->query("INSERT INTO variables (`word`, `text`) VALUES ('$word', '$text')");
    echo 1;
}
于 2012-10-05T11:11:50.610 に答える
-2

クエリで「word」と「text」の前後にバッククォートを使用する理由がわかりません。これをデバッグするために、クエリを文字列に書き込み、実行する前に出力して、クエリが目的のものであることを確認します。次を使用します。

$query = "INSERT INTO variables (`word`, `text`) VALUES ('$word', '$text')"
print("$query")
if ($result = $conn->query($query))
        echo 1;

インサートが機能しませんか?チェックする前にデータベース接続を閉じていますか?チェックしたときに結果がデータベースにコミットされていない可能性がありますか?

于 2012-10-05T11:20:28.257 に答える