无法将数据存储在两个表中

时间:2014-10-12 09:52:09

标签: php mysql sql

我正在尝试使用两个不同的查询将数据存储在两个表中。

其中一个工作正常,但其他人没有保存任何东西。这两个查询是整页脚本的一部分。两种情况下的frist查询都是脚本的一部分并且工作正常。 第二个查询由我编写,用于创建用户点击的其他记录。

actcontest的表结构..表名是actcontest而不是act_contest,这是复制/粘贴错误:[纠正]

userid  varchar(50)
type    varchar(50)
points  int(10)
date    date

案例1:

工作查询:

  $sql = $Db1->query('Insert into ptcwalllogs (userid, user_earned) 
 values ('.$credituser.','.$rate.')');

查询问题:

 $sqlact = $Db1->query('Insert into actcontest (userid, type, points, date)
 values ('$username','ptcwall',6,now())');

案例2:
工作查询:

  $Db1->query("INSERT INTO `likesasapaddon` (user_id, page_id,date)
 VALUES('{$thismemberinfo[userid]}', '{$get['pageid']}',NOW())");

查询问题:

 $Db1->query("INSERT INTO `actcontest` (userid, type, points, date)
 VALUES ('$username','facebook',6,now())");

在两种情况下我想将值存储在同一个表中。

以下是案例1的脚本文件:
这是来自提供商之一的回发。

<?php
$date1 = date('Y-m-d');
include("config.php");
include("includes/mysql.php");
$Db1 = new DB_sql;
$Db1->connect($DBHost, $DBDatabase, $DBUser, $DBPassword);

$your_pwd = ""; /* Postback Password */
$vip=getenv('REMOTE_ADDR');

$sent_pw = $_GET['pwd'];
$credited = intval($_GET['c']);
$credituser = intval($_GET['usr']);
$rate = trim($_GET['r']);
$type = intval($_GET['t']);
$allowed_ip = array('72.52.253.202');//PTCWall's IPS.


if(in_array($vip, $allowed_ip) && $sent_pw == $your_pwd)
{
    if($credited == '1')
    {
        if($type == '1')
        {
            $run = $Db1->query('UPDATE user SET balance=balance+'.$rate.' WHERE userid = '.$credituser);
 // This line below is used to store clicks locally
        $sql = $Db1->query('Insert into ptcwalllogs (userid, user_earned)  values ('.$credituser.','.$rate.')');
$sqlact = $Db1->query("Insert into actcontest (userid, type, points, date)  
values ('".mysqli_real_escape_string($username)."','ptcwall',6,now())");
// $sqlact = $Db1->query('Insert into actcontest (userid, type, points, date) values ("lorry","ptcwall",6,now())');
            if($run)
            {
                exit('ok');
            } else{
                exit('issue');
            }


        }elseif($type == '2'){

            $run = $Db1->query('UPDATE user SET points=points+'.$rate.' WHERE userid = '.$credituser);
            if($run)
            {
                exit('ok');
            } else{
                exit('issue');
            }
        }

    }elseif($credited == '2')
    {
        if($type == '1')
        {
            $run = $Db1->query('UPDATE user SET balance=balance-'.$rate.' WHERE userid = '.$credituser);
            if($run)
            {
                exit('ok');
            } else{
                exit('issue');
            }
        }elseif($type == '2'){

            $run = $Db1->query('UPDATE user SET points=points-'.$rate.' WHERE userid = '.$credituser);
            if($run)
            {
                exit('ok');
            } else{
                exit('issue');
            }
        }
    }
}
else{
    die();
}
//FILE 03302014
?>

Var转储后:

保存在单独的文件中。

daata.php

<?php
$sqlact = $Db1->query("Insert into actcontest (userid, type, points, date)  
values ('".mysqli_real_escape_string($username)."','ptcwall',6,now())");
var_dump($sqlact);
echo " success asdasdasdasdasdasdasdasdas " ;

?>

错误:

  

警告:mysqli_real_escape_string()需要2个参数,1在第3行的./xxxx/daata.php中给出   布尔(真)

请指导。

3 个答案:

答案 0 :(得分:0)

以下是工作查询:

$sqlact = $Db1->query("Insert into act_contest (userid, type, points, date)
 values ('".mysqli_real_escape_string($username)."','ptcwall',6,now())");

$Db1->query("INSERT INTO `actcontest` (userid, type, points, date)
 VALUES ('".mysqli_real_escape_string($username)."','facebook',6,now())");

注意:始终在SQL查询中使用mysqli_real_escape_string(或等效的)字符串。或者您的应用程序很快就会被SQL注入攻击。

答案 1 :(得分:0)

你确定你的桌名“actcontest”吗?在第一种情况下,您在其中放置下划线而不在第二种中放置下划线。 您是否也确定此表架构:用户ID,类型,点和日期?也许你做了一个小错字? 如果我是你,我会先检查所有这些。

答案 2 :(得分:0)

  

警告:mysqli_real_escape_string()预计正好有2个参数,1在第3行的./xxxx/daata.php中给出bool(true)

此警告意味着您需要将数据库连接传递给它,这是它期望的第二个参数。

('".mysqli_real_escape_string($Db1, $username)."','ptcwall',6,now())")

参考文档:


$sqlact = $Db1->query("Insert into act_contest (userid, type, points, date)
 values ('".mysqli_real_escape_string($Db1, $username)."','ptcwall',6,now())");

$Db1->query("INSERT INTO `actcontest` (userid, type, points, date)
 VALUES ('".mysqli_real_escape_string($Db1, $username)."','facebook',6,now())");

另外,请确保您的表中存在所有列。

添加:

die('There was an error running the query [' . $Db1->error . ']');

这将发出错误信号,如果有的话。

即:

if($run)
{
    exit('ok');
} else{
    die('There was an error running the query [' . $Db1->error . ']');
}
  • 对所有查询采用相同的方法。

error reporting添加到文件顶部也是一件好事,这将有助于在生产测试期间。

error_reporting(E_ALL);
ini_set('display_errors', 1);

应该{​​{1}}或任何其他变量未定义。