Вставка базы данных не работает

Эй, у меня проблема с вставкой некоторых данных в мою базу данных:

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 ответа

Строковые литералы в вашем операторе SQL должны быть заключены в одинарные кавычки. Ваш сгенерированный текст SQL выглядит так:

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

Но это действительно должно выглядеть так:

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

Кстати... когда оценивается как целое число, этот строковый литерал 'amount' будет интерпретироваться как ноль.

Вам следует рассмотреть возможность использования подготовленных операторов с переменными связывания вместо включения переменных в текст SQL. (Есть много примеров этого на Stackru.)

Чтобы проверить, успешно ли завершился mysqli_query:

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

Причина, по которой вы получаете "вставку", заключается в том, что ваш if устанавливает переменную в 1 и в результате получает значение true. Используйте двойные равные для сравнения.

право:

if ($insert == 1)

неправильно:

if ($insert = 1)

Насколько ваш sql, похоже, есть ошибки с вашими запросами. $txn_id и $payer_email оба varchars, которые требуют от вас использовать кавычки, так как это строка

Другие вопросы по тегам