1

我是 php 编程的新手,我在这里遇到了一个麻烦。可能对你们所有人来说都很简单,但是好的..

当我第一次尝试在名为“novica”的 mysql 表中插入一行时,它工作正常,但之后我无法添加任何新行。但是当我删除这一行时,我可以添加一个……但同样,只有一个。我不知道这是什么原因。

这是我的小 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 回答