-1

嘿,我在数据库中插入一些数据时遇到问题:

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

2 回答 2

0

您被“插入”的原因是因为您的 if 将变量设置为 1 并且结果为真。使用双等号进行比较。

正确的:

if ($insert == 1)

错误的:

if ($insert = 1)

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

于 2013-08-01T18:51:40.350 回答
0

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

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

但它应该看起来像这样:

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

顺便说一句...当评估为整数时,该字符串文字'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
}
于 2013-08-01T18:54:09.923 回答