数据库INSERT不会发生

时间:2010-04-23 13:34:02

标签: php mysql

我的代码如下:

<?php
include("config.php");

$ip=$_SERVER['REMOTE_ADDR']; 

if($_POST['id'])
{
    $id=$_POST['id'];
    $id = mysql_escape_String($id);

    $ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
    $count=mysql_num_rows($ip_sql);

    if($count==0)
    {
        $sql = "update Messages set up=up+1  where mes_id='$id'";
        mysql_query($sql);

        $sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
        mysql_query($sql_in) or die(mysql_error());
        echo "<script>alert('Thanks for the vote');</script>";


    }
    else
    {
        echo "<script>alert('You have already voted');</script>";
    }

    $result=mysql_query("select up from Messages where mes_id='$id'");
    $row=mysql_fetch_array($result);
    $up_value=$row['up'];
    echo "<img src='button.png' width='110' height='90'>";
    echo $up_value;

}
?>

我的问题是插入过程根本不会发生。 script标记回显了一个警告框。甚至img标记也会回显到网页。但插入过程不会发生。配置文件很好。 注意:此代码适用于具有PHP 5.3的本地计算机,但它不适用于具有PHP 5.2的服务器。

5 个答案:

答案 0 :(得分:0)

唯一的解释是$count==0检查是错误的。尝试使用此解决方法:

$ip_sql=mysql_query("select count(*) from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$rc=mysql_fetch_row($ip_sql);
$count=$rc[0];

而不是:

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);

答案 1 :(得分:0)

您是否尝试过乱搞报价?如果我错了,请有人纠正我,但AFAIK,单引号内的变量不会在PHP中扩展。

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='".$id."' and ip_add='".$ip."'");

答案 2 :(得分:0)

看看答案和评论,是时候上学了:

    $sql = "update Messages set up=up+1  where mes_id='$id'";
    echo $sql . '<br>';
    mysql_query($sql);

    $sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
    echo $sql_in . '<br>';
    mysql_query($sql_in) or die(mysql_error());
    echo "<script>alert('Thanks for the vote');</script>";

你在找什么?

你正在为$ id和$ ip设置值 - 也许其中一个是空的或者包含一个以某种方式使结果“奇怪”的字符。通过仔细查看您将要执行的原始查询,您将看到它的可变部分是否令人不快。

答案 3 :(得分:0)

您没有检查第一个查询是否成功:

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);

那里没有... or die(mysql_error()),但这很可能不是问题,因为如果查询失败,当你进行mysql_num_rows()调用时,你会得到一个“无效语句句柄”类型错误之后立即。作为一个风格提示,我建议重写第一个查询如下:

SELECT COUNT(*) FROM Voting_IP
WHERE (mes_id_fk = $id) AND (ip_add = $ip)

您没有使用任何检索到的值,只使用行数,因此执行“select *”类型查询没有任何意义,这会强制数据库对所有可能的值执行至少一些处理。如果此系统扩展到非常多的投票和IP,则使用count()版本将更有效。

你说插入没有发生,但是没有说明发生了哪个alert(),这意味着插入查询出错,或者你的第一个查询返回0,整个块都带有跳过插入查询。

您是否尝试过手动运行更新/插入查询?您没有检查更新是否成功,因为之后没有or die(mysql_error())。也许有外键错误,语法错误等......

答案 4 :(得分:0)