数据库插入不起作用

时间:2013-08-01 18:33:37

标签: php mysql insert

嘿,我在我的数据库中插入一些数据有问题:

define('SECURE', true);
include "storescripts/connect_to_mysql.php";

    $txn_id = 123456789101234567;
    $payer_email = "irgendwas@gmx.de";
    $mc_gross = "amount";

    $sql = "SELECT COUNT(*) AS count FROM `trans` WHERE `txn_id` = $txn_id";
    $q = mysqli_query($mysqli, $sql);
    $f = mysqli_fetch_array($q);

    if($f['count'] > 0) {
        echo "Transaction already processed"; 
    } else { 
        $insert = mysqli_query($mysqli, "INSERT INTO trans (`txn_id`, `payer_email`,`mc_gross`) 
                                                    VALUES ($txn_id,$payer_email,$mc_gross)");
        if($insert = 1) {
            echo "inserted";
        } else {
            echo "not inserted";
        }
    }

结果我得到:“插入”,但我的数据库中没有数据。任何人都可以帮助我吗?错误在哪里?

编辑:这是我的表:

define('SECURE', true);
require "connect_to_mysql.php";  
$sqlCommand = "CREATE TABLE trans (
             id int(11) NOT NULL auto_increment,
             txn_id varchar(255) NOT NULL,
             payer_email varchar(255) NOT NULL,
             mc_gross int(255) NOT NULL,
             PRIMARY KEY (id),
             UNIQUE KEY (txn_id))";
if ($mysqli->query($sqlCommand)) { 
    echo "Your trans table has been created successfully!"; 
} else { 
    echo "CRITICAL ERROR;".$mysqli->error; 
}

2 个答案:

答案 0 :(得分:0)

你被“插入”的原因是你的if将变量设置为1并且结果为true。使用double equals进行比较。

右:

if ($insert == 1)

错误:

if ($insert = 1)

就你的sql而言,你的查询似乎有错误。 $ txn_id和$ payer_email都是varchars,它们要求你使用引号,因为它是一个字符串

答案 1 :(得分:0)

SQL语句中的字符串文字需要用单引号括起来。生成的SQL文本如下所示:

    VALUES (123456789101234567,someone@email.de,amount)

但它应该看起来像这样:

    VALUES ('123456789101234567','someone@email.de','amount')
            ^                  ^ ^                ^ ^      ^ 

BTW ...当评估为整数时,该字符串文字'amount'将被解释为零。

您应该考虑将预准备语句与绑定变量一起使用,而不是在SQL文本中包含变量。 (StackOverflow上有很多例子。)

检查mysqli_query是否成功:

$sql = "INSERT INTO ... ";
if ( mysqli_query($mysqli, $sql) ) {
   // sql statement executed without error
} else {
   // sql statement execution raised an error
}