2012-11-22 4 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 COLLATION_CO[email protected]_COLLATION_CONNECTION */; 

답변

6

가 기본 키가 자동 증가로 설정되어 있지 않습니다. 이와 같이 새 행을 삽입 할 때 0의 ID가 지정 될 수 있지만 해당 ID가 이미 사용되었으므로 후속 삽입이 실패합니다.

어느

는 insert 문에 ID를 추가하거나 id_novica 자동 증가하게 - (mysql_error를()) 어떤 문제를 찾아 오류를 확인하기 위해 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

그것은 항상 신. 문제가있는 경우 쿼리를 표시하고 콘솔에서 직접 실행하고 어떤 오류가 발생했는지 확인하십시오.

일반적으로 기본 키 id_novica은 고유해야하므로 이후 삽입이 실패합니다. 값을 변경하거나 primari 키를 AUTO_INCREMENT로 정의하여 mysql이이를 처리하도록해야한다. 그래서 그 대신

`id_novica` int(10) NOT NULL, 

의 당신은 당신의 INSERTS 제공하지 않습니다

`id_novica` int(10) NOT NULL AUTO_INCREMENT, 

과에 id_novica을 가져야한다.

mysql_ 퇴장을 사용하면 안됩니다. 으로 대체되었습니다. 당신의 삽입에 고유 ID를 추가하거나 ID 열을 업데이트 mysqli_로 전환하지만 당신이 시작하는 경우, PDO 대신

0

으로 직접 이동할 자동으로 증가한다 :

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