PHP не вставляется в Mysql (автоинкремент)


Я сделал ссылку на свою таблицу Mysql следующим образом:

введите здесь описание изображениявведите здесь описание изображения

Эта проблема возникает из-за того, что я не могу вставить auto_increment в свой запрос mysql.

index.php

<?php

        $name=$_POST["name"];
        $description=$_POST["description"];
        $image=$_POST["image"];
        $amount=$_POST["amount"];

 $sql=mysql_query("INSERT INTO `store`(`id`, `name`, `description`, `price`, `image`) VALUES (NULL,'".$name."','".$description."','".$amount."','".$image."')");




?>

Я отправляю ему через HTML-форму, и он выполняет запрос, но я не получаю строк в этой таблице. Я думаю, это из-за auto_increment, Unique или Primary. мне сказали использовать NULL вместо значения auto_increment, но это не работает.

Любая помощь?

P.S Нуб здесь!

РЕДАКТИРОВАТЬ: ошибка:

Устарело: mysql_query(): расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO в D:\xampp\htdocs\Html\Home\index.php в строке 9.


person Ashesh Kumar    schedule 10.10.2014    source источник
comment
Не используйте mysql_query в новом коде, это почти устарело. Кроме того, не создавайте строки запроса из пользовательского ввода, ваше приложение будет широко открыто для атак с помощью SQL-инъекций.   -  person GordonM    schedule 10.10.2014
comment
Поскольку вы этого не делаете... Добавьте отчет об ошибках в начало вашего файла (файлов) сразу после открывающего <?php тега error_reporting(E_ALL); ini_set('display_errors', 1);, посмотрите, даст ли это что-нибудь. Также с or die(mysql_error()) по mysql_query().   -  person Funk Forty Niner    schedule 10.10.2014
comment
Кроме того, вы уверены, что вы подключены?   -  person Funk Forty Niner    schedule 10.10.2014
comment
@AsheshKumar Вот и все, используйте mysqli_ функции. php.net/manual/en/book.mysqli.php   -  person Funk Forty Niner    schedule 10.10.2014
comment
@ Fred-ii- я предоставил всю информацию. Тогда зачем минусовать?   -  person Ashesh Kumar    schedule 10.10.2014
comment
К сожалению, я нажал не ту клавишу, лол! моя вина. Итак, проблема с вашим MySQL API. Смотрите ссылки выше, это должно исправить.   -  person Funk Forty Niner    schedule 10.10.2014
comment
@ Fred-ii- Как-нибудь еще?   -  person Ashesh Kumar    schedule 10.10.2014
comment
Другой путь к чему? Насколько я понимаю, вам нужно поменять местами mysql_ с mysqli_ — заметили i? Это значит улучшенный.   -  person Funk Forty Niner    schedule 10.10.2014
comment
@Fred-ii- Давайте продолжим это обсуждение в чате .   -  person Ashesh Kumar    schedule 10.10.2014
comment
Извините, я не могу общаться, я должен уйти.   -  person Funk Forty Niner    schedule 10.10.2014
comment
@ Fred-ii- Любая инструкция о том, как деактивировать Mysql и настроить соединение mysqli?   -  person Ashesh Kumar    schedule 10.10.2014
comment
Прочитайте этот stackoverflow. com/questions/1390607/ и ссылки в ответах. Мне действительно нужно идти, я и так достаточно опаздываю. Вернусь позже, если смогу тогда помочь.   -  person Funk Forty Niner    schedule 10.10.2014


Ответы (4)


Чтобы решить проблему с устаревшим mysql_query, я рекомендую вместо этого PDO. Это очень просто и намного безопаснее с готовыми шагами. Этот фрагмент обеспечит подключение к БД для выполнения ваших запросов:

$mysql_host = "localhost";
$mysql_db = "my_database";
$mysql_user = "my_user";
$mysql_password = "mypassword";
$db = new PDO('mysql:host='.$mysql_host.';dbname='.$mysql_db.';charset=utf8', $mysql_user, $mysql_password);

Как только вы разместите это на своей странице, вы можете использовать $db для взаимодействия с вашей базой данных.

$q = $db->prepare("INSERT INTO `store` (`name`, `description`, `price`, `image`) VALUES (:name, :desc, :amt, :img)");
$q->execute(array(":name"=>$name, ":desc"=>$description, ":amt"=>$amount, ":img"=>$image));

Кроме того, для значений автоинкремента вы можете полностью опустить это поле.

PS, есть ошибка stntax. Вам не хватает пробела перед открывающей скобкой: store (

person I wrestled a bear once.    schedule 10.10.2014
comment
Принято за указание самого простого способа подключения к БД, а также за указание на синтаксическую ошибку - person Ashesh Kumar; 10.10.2014

Удалите столбец id из вашего запроса:

$sql=mysql_query("INSERT INTO `store`(`name`, `description`, `price`, `image`) VALUES ('".$name."','".$description."','".$amount."','".$image."')");
person John Conde    schedule 10.10.2014
comment
@AsheshKumar Прочтите комментарии под своим вопросом. - person Funk Forty Niner; 10.10.2014

Вы не можете вставить NULL в поле AUTO_INCREMENT! Он автоматически заполнит это поле, поэтому делайте запрос без id!

ОБНОВИТЬ!

Насколько я знаю, лучшей практикой является PDO, поэтому я бы посоветовал вам перейти на PDO!

Кроме того, вы должны сначала установить соединение! (DB_HOST и т. д. являются константами! вы можете изменить это на переменные, если хотите)

$dbh = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASSWORD);

Тогда попробуйте это:

<?php

    $statement = $dbh->prepare("INSERT INTO `store`(`name`, `description`, `price`, `image`)
                                            VALUES (':name',':description',':amount',':image')");

    $statement->bindParam(':name', $_POST['name']);
    $statement->bindParam(':description', $_POST['description']);
    $statement->bindParam(':amount', $_POST['amount']);
    $statement->bindParam(':image', $_POST['image']);

    $statement->execute();

?>
person Rizier123    schedule 10.10.2014
comment
не забудьте strip_tags()! - person alexander7567; 10.10.2014
comment
@AsheshKumar обновил его! Попробуйте новый, также я бы посоветовал вам избежать вашего POST! $connection — это ваша переменная соединения. - person Rizier123; 10.10.2014
comment
@ Rizier123 Почему я должен перейти к $connection ? - person Ashesh Kumar; 10.10.2014
comment
@AsheshKumar Это необязательно, но указывает соединение с MySQL. - person Rizier123; 10.10.2014
comment
Пожалуйста, не используйте mysql_* функции, они не больше не поддерживаются и официально объявлены устаревшими. Узнайте о подготовленных операторах и используйте PDO или MySQL. Эта статья поможет вам принять решение. - person Jay Blanchard; 10.10.2014
comment
@ Rizier123 Вот это! `Устарело: mysql_real_escape_string(): расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO в D:\xampp\htdocs\Html\Home\index.php в строке 4` - person Ashesh Kumar; 10.10.2014
comment
@Rizier123 и это `Устарело: mysql_query(): расширение mysql устарело и будет удалено в будущем: вместо этого используйте mysqli или PDO в D:\xampp\htdocs\Html\Home\index.php в строке 10. - person Ashesh Kumar; 10.10.2014

Удалить «id» из значений в вашем запросе

$sql=mysql_query("INSERT INTO `store`(`name`, `description`, `price`, `image`) VALUES ('".$name."','".$description."','".$amount."','".$image."')");

AUTO_INCREMENT работает сам по себе ;)

person CapitanFindus    schedule 10.10.2014
comment
Не работает Пожалуйста, помогите - person Ashesh Kumar; 10.10.2014
comment
вывести ошибку с помощью mysql_query() или умереть (mysql_error()) - person CapitanFindus; 10.10.2014