Вставка базы данных не работает
Эй, у меня проблема с вставкой некоторых данных в мою базу данных:
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, которые требуют от вас использовать кавычки, так как это строка