2013-08-01 3 views
0

모든 것이 잘 작동했지만 지금은 무슨 말인지 알 수 없습니다. 사실 mysql은 부동 값을 저장하지 않으며 integer, varchar 등의 다른 모든 값은 수용합니다. 나는 일부 코드를 게시하고있다. 이름을 저장하는 두 개의 쿼리 첫번째, 그 위에서 미세 .PHP왜 mysql 버리기 플로팅 값을?

$que_cinstructors = " 
    INSERT INTO 
     course_instructors 
     (usn, i1, i2, i3, i4, i5, i6, i7, i8, i9) 
    VALUES 
     (:usn, :i1, :i2, :i3, :i4, :i5, :i6, :i7, :i8, :i9)"; 
$query_params3 = array(':usn' => $_POST['usn'], 
    ':i1' => $_POST['i1'], 
    ':i2' => $_POST['i2'], 
    ':i3' => $_POST['i3'], 
    ':i4' => $_POST['i4'], 
    ':i5' => $_POST['i5'], 
    ':i6' => $_POST['i6'], 
    ':i7' => $_POST['i7'], 
    ':i8' => $_POST['i8'], 
    ':i9' => $_POST['i9'] 
); 
$statement3 = $db->prepare($que_cinstructors); 
$result3 = $statement3->execute($query_params3); 

$que_ccredits = " 
    INSERT INTO 
     course_credits 
     (usn, c1, c2, c3, c4, c5, c6, c7, c8, c9, total) 
    VALUES (:usn, :c1, :c2, :c3, :c4, :c5, :c6, :c7, :c8, :c9, :total)"; 
$query_params4 = array(':usn' => $_POST['usn'], 
    ':c1' => $_POST['c1'], 
    ':c2' => $_POST['c2'], 
    ':c3' => $_POST['c3'], 
    ':c4' => $_POST['c4'], 
    ':c5' => $_POST['c5'], 
    ':c6' => $_POST['c6'], 
    ':c7' => $_POST['c7'], 
    ':c8' => $_POST['c8'], 
    ':c9' => $_POST['c9'], 
    ':total' => $_POST['total'] 
); 
$statement4 = $db->prepare($que_ccredits); 
$result4 = $statement4->execute($query_params4); 

쿼리. 그러나 두 번째 것은 부동 소수점 값을 저장하는 것입니다. 여기에 나는 세션 변수에서 usn을 얻는다. 처음에는 삽입이 좋지만 두 번째 경우에는 아무것도 저장되지 않습니다. .SQL

에서

데이터베이스

CREATE TABLE IF NOT EXISTS `course_instructors` (
`i_id` int(11) NOT NULL AUTO_INCREMENT, 
`usn` varchar(7) NOT NULL, 
`i1` varchar(50) NOT NULL, 
`i2` varchar(50) NOT NULL, 
`i3` varchar(50) NOT NULL, 
`i4` varchar(50) NOT NULL, 
`i5` varchar(50) NOT NULL, 
`i6` varchar(50) NOT NULL, 
`i7` varchar(50) NOT NULL, 
`i8` varchar(50) NOT NULL, 
`i9` varchar(50) NOT NULL, 
PRIMARY KEY (`i_id`), 
UNIQUE KEY `usn` (`usn`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 

    CREATE TABLE IF NOT EXISTS `course_credits` (
    `c_id` int(11) NOT NULL AUTO_INCREMENT, 
    `usn` varchar(7) NOT NULL, 
    `c1` float NOT NULL, 
    `c2` float NOT NULL, 
    `c3` float NOT NULL, 
    `c4` float NOT NULL, 
    `c5` float NOT NULL, 
`c6` float NOT NULL, 
`c7` float NOT NULL, 
`c8` float NOT NULL, 
`c9` float NOT NULL, 
`total` float NOT NULL, 
    PRIMARY KEY (`c_id`), 
    UNIQUE KEY `usn` (`usn`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; 

모든 것이 잘 작동했다. 나는 프로젝트의 다른 부분들과 함께 일하고 있었는데, 오늘 내가이 문제에 직면했을 때 제출하려고한다. 나를 미쳤어 요. 도와주세요. 그리고 텍스트 필드 이름이 정확합니다.

+4

정확히 어떻게 버리는가? 값을 잘라 버림? 3.1415가 3이됩니까? 완전히 잘못된 값입니까? (3.1415는 17이됩니다). 결국 널 값으로 끝날까요? ** ** ** ** ** ** mysql이 당신의 코드가 아닌 확실한가요? $ _POST 값이 정확한지 확인 했습니까? –

+1

입력에 올바른 소수 구분 기호를 사용하고 있습니까? – DCoder

+0

데이터를 삽입하는 동안 경고가 없습니까? O_o –

답변

0

$ stmt-> bind_param()을 수행하지 않는 것 같습니다. 이 글이이 점을 부정하는 것으로 보일 지 모르지만 여러 PHP 릴리스에서 PDO의 버그가있는 버전을 언급하는 데는 도움이 될 것입니다. 그러나 그들은 $ stmt-> bind_param()을 사용하지만 PDO :: PARAM_STR을 사용할 수 있다고 말합니다. 당신은 오래된 mysql_로 * 코드 당신이 그것을 사용 해달라고 말하는 의견에 질식받을를 사용하여 일부 코드를 게시 할 경우

Might be worth checking it out

아닌가요은 중대하다. PDO를 사용하면 방탄 당하지 않습니다. Aint life a beach.

관련 문제