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 回答
0

我一直在努力解决同样的问题,但以不同的方式解决了它。

检查有多少行受到影响,像这样(这个例子使用 mysqli,但我希望你能明白这一点):

$number_of_rows_affected = mysqli_affected_rows($conn);

如果 $number_of_rows_affected = 0 则 INSERT 不起作用。大于 0 的数字表示插入成功。

于 2020-02-21T18:37:36.727 回答
-2

不知道为什么您在查询中使用“单词”和“文本”周围的反引号。为了调试这个,我将查询写入一个字符串并在执行之前打印它,以确保查询是我想要的,所以使用:

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

你确定插入不起作用?您是否在检查之前关闭了数据库连接,也许在您检查时结果还没有提交到您的数据库?

于 2012-10-05T11:20:28.257 回答