1

私はphpプログラミングの初心者で、ここで1つの問題に直面しています。おそらく皆さんにとっては簡単なことでしょうが、わかりました..

最初に「novica」という名前の mysql テーブルに 1 つの行を挿入しようとすると、正常に動作しますが、その後、新しい行を追加できません。しかし、この行を削除すると、1 つ追加できますが、1 つだけです。何が原因なのかわからない。

ここに私の小さなPHPがあります:

<?php
    $con = mysql_connect("localhost","root","password");
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("sola", $con);
    mysql_query("INSERT INTO novica (naslov, vsebina, avtor, ustvarjeno) VALUES('$_POST[address]', '$_POST[content]', 'Klemen', NOW())");

    mysql_close($con);
?>

そして、ここに mysql エクスポートの SQL コードがあります:

-- phpMyAdmin SQL Dump
-- version 3.4.10.1deb1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Nov 22, 2012 at 06:41 PM
-- Server version: 5.5.28
-- PHP Version: 5.3.10-1ubuntu3.4

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `sola`
--

-- --------------------------------------------------------

--
-- Table structure for table `novica`
--

CREATE TABLE IF NOT EXISTS `novica` (
  `id_novica` int(10) NOT NULL,
  `naslov` text COLLATE utf8mb4_bin NOT NULL,
  `vsebina` text COLLATE utf8mb4_bin NOT NULL,
  `avtor` text COLLATE utf8mb4_bin NOT NULL,
  `ustvarjeno` date NOT NULL,
  `posodobljeno` date DEFAULT NULL,
  PRIMARY KEY (`id_novica`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

--
-- Dumping data for table `novica`
--

INSERT INTO `novica` (`id_novica`, `naslov`, `vsebina`, `avtor`, `ustvarjeno`, `posodobljeno`) VALUES
(0, 'a', 'a', 'Klemen', '2012-11-22', NULL);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
4

3 に答える 3

6

主キーが自動インクリメントに設定されていません。そのため、新しい行を挿入すると、ゼロの ID が割り当てられる可能性がありますが、その ID が既に取得されているため、後続の挿入は失敗します。

ID を挿入ステートメントに追加するか、id_novica自動インクリメントを作成します - http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

CREATE TABLE IF NOT EXISTS `novica` (
  `id_novica` int(10) NOT NULL AUTO_INCREMENT,
  `naslov` text COLLATE utf8mb4_bin NOT NULL,
  `vsebina` text COLLATE utf8mb4_bin NOT NULL,
  `avtor` text COLLATE utf8mb4_bin NOT NULL,
  `ustvarjeno` date NOT NULL,
  `posodobljeno` date DEFAULT NULL,
  PRIMARY KEY (`id_novica`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
于 2012-11-22T17:48:00.093 に答える
1

エラー (mysql_error()) をチェックして、何が問題なのかを調べることは常に神です。問題がある場合は、クエリを表示し、コンソールで手動で実行して、発生するエラーを確認してください。

一般に、主キーid_novicaは一意である必要があるため、後続の挿入は失敗します。値を変更するか、主キーを AUTO_INCREMENT として定義して、これを処理するように mysql に指示する必要があります。だから代わりに

`id_novica` int(10) NOT NULL,

あなたは持っているでしょう

`id_novica` int(10) NOT NULL AUTO_INCREMENT,

そして、あなたINSERTSはまったく提供id_novicaしません。

mysql_また、 exitensionを使用するべきではありません。非推奨です。に切り替えmysqli_ますが、開始している場合はPDO代わりに直接ジャンプします

于 2012-11-22T17:48:31.350 に答える
0

挿入に一意の ID を追加するか、ID 列を更新して自動的にインクリメントします。

ALTER TABLE  `novica` CHANGE  `id_novica`  `id_novica` INT( 10 ) NOT NULL AUTO_INCREMENT
于 2012-11-22T17:51:39.250 に答える