2012-11-22 37 views
1

我在php編程方面很新穎,我在這裏遇到了一個麻煩。大概這對大家會很簡單,但是好的。php mysql insert

當我嘗試向名爲「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 @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@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 [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 

回答

6

你的主鍵沒有被設置爲自動增量。因此,當您插入一個新行時,可能會分配0的ID,但隨後的插入將失敗,因爲該ID已被佔用。

要麼添加標識加入INSERT語句,或使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; 
+0

哦,天哪:)感謝了很多!我真的檢查了一切,除了這個...再次 – Clem

1

它永遠是上帝,檢查錯誤(mysql_error()),以找出問題。如果有問題,請顯示您的查詢,在控制檯中手動執行並檢查您得到的錯誤。

一般而言,您的主鍵id_novica必須是唯一的,因此後續插入失敗。您應該更改值或將您的primari關鍵字定義爲AUTO_INCREMENT,以告訴mysql處理這個問題。因此,而不是

`id_novica` int(10) NOT NULL, 

你有權

`id_novica` int(10) NOT NULL AUTO_INCREMENT, 

,並在您INSERTS不提供id_novica可言。

您也不應該使用mysql_緊張度 - 這是已棄用。切換到mysqli_但如果你開始,直接跳轉到PDO代替

0

添加唯一ID,以您的插入或更新您的ID列自動遞增:

ALTER TABLE `novica` CHANGE `id_novica` `id_novica` INT(10) NOT NULL AUTO_INCREMENT