2013-04-20 10 views
1

4 시간 동안 검색 했는데도이 함수가 0을 반환하는 이유를 찾지 못했습니다. 어제 작동했지만 이제는 스크립트에 몇 가지 변경 사항을 적용했습니다. 내 주제와 같은 주제가 많지만 정답을 찾을 수 없습니다.mysql_insert_id()는 항상 0을 반환합니다.

내 index.php에는 4 개의 텍스트 입력이 있습니다. 내 update.php 파일 (POST 메소드)로 캡처합니다. 여기

는 update.php

<?php 
include "db.php"; 
connect_to_db(); 

require_once('recaptchalib.php'); 
$privatekey = "N/A"; 
$resp = recaptcha_check_answer ($privatekey,$_SERVER["REMOTE_ADDR"],$_POST["recaptcha_challenge_field"],$_POST["recaptcha_response_field"]); 

if (!$resp->is_valid) { 
    echo 'Tekst sa slike je pogresno prepisan. Vracamo Vas natrag.'; 
    echo '<meta http-equiv="refresh" content="5; URL=../">'; 

} else { 
    $pic1 = $_POST["pic1"]; 
    $p1 = htmlspecialchars($pic1); 
    $pic2 = $_POST["pic2"]; 
    $p2 = htmlspecialchars($pic2); 
    $html = $_POST["html"]; 
    $h = htmlspecialchars($html); 
    $link = $_POST["link"]; 
    $l = htmlspecialchars($link); 

    $id = mysql_insert_id(); 

    $query = "INSERT INTO `koraci` (`id`, `p1`, `p2`, `h`, `l`) VALUES ({$id}, '{$p1}', '{$p2}','{$h}','{$l}')"; 
    $result = mysql_query($query) or die(mysql_error()); 
} 

include_once("config.php"); 
?> 
<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1250" /> 
<link rel="stylesheet" type="text/css" href="style.css" /> 
<title><?php echo $title; ?></title> 
<script type="text/javascript" src="cufon-yui.js"></script> 
<script type="text/javascript" src="font.js"></script> 
<script type="text/javascript"> 
    Cufon.set('fontSize', '20px').replace('body'); 
</script> 
</head> 

<body> 
<?php include_once("analytics.php"); ?> 
<h1><?php echo $title; ?></h1> 
<br /> 
<textarea name="one"><center><img src="<?php echo $p1; ?>" id="Like"></center></textarea> 
<br /> 
<textarea name="two"><iframe width=800 height=500 frameborder=0 src="<?php echo $id; ?>"></iframe></textarea> 
<br /> 
</body> 
</html> 

의 조각 그리고 내 db.php를에 있습니다

<?php 
define("DB_SERVER", "N/A"); 
define("DB_USER", "N/A"); 
define("DB_PASS", "N/A"); 
define("DB_NAME", "N/A"); 

function connect_to_db() { 
    $connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die("There was an error connecting to the database: " . mysql_error()); 
    mysql_select_db(DB_NAME); 
    mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); 
    return $connection; 
} 
?> 

N/A는 I 자세한 사항 점유율을 늘 의미한다.

내 db.sql :

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

CREATE TABLE IF NOT EXISTS `koraci` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `p1` varchar(255) NOT NULL, 
    `p2` varchar(255) NOT NULL, 
    `h` varchar(255) NOT NULL, 
    `l` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; 

INSERT INTO `koraci` (`id`, `p1`, `p2`, `h`, `l`) VALUES 
(1, 'SOMETHING', 'SOMETHING', 'SOMETHING', 'SOMETHING'); 

그래서 basiclly,이 DB에 모든 전송이 (내가 phpMyAdmin을 함께 볼 수 있습니다).

문제는 항상 메신저가 0 인 ID로 반환됩니다!

오류를 표시하지 않습니다 (PHP 또는 MySQL).

[15시 41분] 나는에 update.php 업데이트 한 :

if (!$resp->is_valid) { 
    echo 'Tekst sa slike je pogresno prepisan. Vracamo Vas natrag.'; 
    echo '<meta http-equiv="refresh" content="5; URL=../">'; 

} else { 
    $pic1 = $_POST["pic1"]; 
    $p1 = htmlspecialchars($pic1); 
    $pic2 = $_POST["pic2"]; 
    $p2 = htmlspecialchars($pic2); 
    $html = $_POST["html"]; 
    $h = htmlspecialchars($html); 
    $link = $_POST["link"]; 
    $l = htmlspecialchars($link); 

    $query = "INSERT INTO `koraci` (`id`, `p1`, `p2`, `h`, `l`) VALUES ({$id}, '{$p1}', '{$p2}','{$h}','{$l}')"; 
    $result = mysql_query($query) or die(mysql_error()); 

    $id = mysql_insert_id(); 
} 
?> 

그리고 지금 나는이 오류가 : 는 "당신은 당신의 SQL 구문에 오류가 있습니다를, MySQL의에 해당하는 설명서를 확인 올바른 구문을 사용할 서버 버전 "

[16:04] 쿼리 후 ID를 설정하면 ID가 쿼리에 포함되지 않습니다. 나는 이것에 대해 이야기하고있다 :

INSERT INTO `koraci` (`id`, `p1`, `p2`, `h`, `l`) VALUES (, 'SOMETHING', 'SOMETHING','SOMETHING','SOMETHING') 
+0

코드는 SQL 삽입에 취약합니다. 'htmlspecialchars' 대신에 매개 변수화 된 쿼리를 사용하십시오. –

+0

데이터를 탈출하지 않으면 해킹 당할 수 있습니다. MySQL_ * 함수도 사용하지 마십시오. –

+1

내가 말한 것처럼 : 매개 변수화 된 쿼리 (MySQLi 또는 PDO 검색)를 사용하십시오. –

답변

7

mysql_querymysql_insert_id를 수행합니다.

here 설명서를 확인한 후 mysql* 기능을 더 이상 사용하지 마십시오. 빨간색 상자에 설명되어 있습니다. 이러한 기능과 관련하여 증권 문제가 있습니다.

mysql_insert_id : Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT).

코드에서 mysql_insert_id을 입력하면 삽입되지 않았습니다. 내 경우

+2

mysql의 _security_ 문제에 대해 들어 보지 못했습니다. * 함수를 사용하면 더 이상 최신 기능이없고 기능이 부족하며 성능은 mysqli보다 낮습니다. – Sven

+0

네, 물론,하지만 훨씬 더 조심해야합니다. 그리고 당신은 쉽게 탈출구를 잊을 수 있으며, 앱의 보안을 깨뜨릴 수 있습니다. – Pierrickouw

+1

@GreenLeaf : MySQLi 또는 PDO를 사용할 때 탈출하는 것을 잊어 버리는 것은 매우 쉽습니다. 그렇기 때문에 매개 변수가있는 쿼리를 사용하는 것이 좋습니다. –

1

, 나는뿐만 아니라 AUTO_INCREMENT했다하지만 여전히 나는 내가 발견 핵심 이유는 DB 연결에 사용되는 코드는 항상 0

얻고 있었다. 이전에 나는 내가 사용하는 올바른 코드를 여기에 0

// THIS CODE RETURNS ALWAYS "0" 
$con = @mysql_connect($mysql_db_hostname, $mysql_db_user, $mysql_db_password, $mysql_db_database);  
if (!$con) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

를 반환 일으키는 코드입니다 사용되었으며 그것은 잘 작동하기 시작했다.

// THIS CODE RETURNS CORRECT VALUE OF LAST INSERTED ROW 
$link = mysql_connect('localhost', 'root', ''); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('openfire'); 

희망이 있으면 도움이 될 것입니다.

관련 문제