对于INSERT查询,mysqli返回true,未插入行

时间:2012-10-05 11:08:16

标签: php mysql insert mysqli

 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;
    }
}

以上是INSD代码(并更新)UPDATE代码正常工作,但是当调用INSERT查询时,查询返回true但是当我检查数据时,它还没有被插入。

提前感谢任何帮助。

编辑:

变量表结构:

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

3 个答案:

答案 0 :(得分:2)

=条件下只有一个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;
}

答案 1 :(得分:0)

不确定为什么在查询中使用'word'和'text'周围的反引号。 为了调试这个,我将查询写入字符串并在执行之前打印它,以确保查询是我想要的,所以使用:

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

你确定插入不起作用吗?在检查之前是否关闭了数据库连接,可能在检查时结果尚未提交到数据库?

答案 2 :(得分:0)

我一直在努力解决相同的问题,但是以不同的方式解决了这个问题。

检查受影响的行数,如下所示(本示例使用mysqli,但希望您能理解这一点):

$number_of_rows_affected = mysqli_affected_rows($conn);

如果$ number_of_rows_affected = 0,则INSERT无法正常工作。大于0的数字表示插入成功。