insert 관련 sql 쿼리 문법 오류

insert 관련 sql 쿼리 문법 오류

QA

insert 관련 sql 쿼리 문법 오류

본문

안녕하세요.

 

회원 정보 입력 페이지를 만들때

qa01.php 정보 입력하고 다음 클릭 qa02.php 정보 입력 후

qa03.php 페이지에서 db 값을 입력할려고 합니다.

 

qa03.php 에

<?php echo $member["mb_id"]; ?> 입력해서 값을 얻으면 id 값이 정상적으로 나옵니다.

 

그런데...

에러가 뜨네요.

 

qa03.php 페이지


<form id="fregisterform" name="fregisterform" action="/bbs/qa_update.php" onsubmit="return fregisterform_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off">
 
<input type="hidden" name="mb_id" value="<?php echo $_POST['$member["mb_id"]']; ?>">
<input type="hidden" name="mb_qa01" value="<?php echo $_POST['mb_qa01']; ?>">
<input type="hidden" name="mb_qa02" value="<?php echo $_POST['mb_qa02']; ?>">
 

<td class="qa01-a01">
        <input type="radio" name="mb_qa03" value="예"<?php echo ($member['mb_qa03'] == "예") ? " checked" : "";?> required > 예 
        <br><br><input type="radio" name="mb_qa03" value="아니오"<?php echo ($member['mb_qa03'] == "아니오") ? " checked" : "";?>> 아니오 
</td>
 
중간생략
 
<div class="btn_confirm">
      <a href="/bbs/qa02.php" class="btn_cancel">이전</a>
      <input type="submit" value="<?php echo $w==''?'완료':'완료'; ?>" id="btn_submit" class="btn_submit" accesskey="s">
      </div>

 

이렇게 입력했고

 

qa_update.php 파일에는 


<?php
include_once('./_common.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
include_once(G5_LIB_PATH.'/register.lib.php');
include_once(G5_LIB_PATH.'/mailer.lib.php');
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
 
$mb_id               = isset($_POST['mb_id'])                 ? trim($_POST['mb_id'])               : "";
$mb_qa01           = isset($_POST['mb_qa01'])             ? trim($_POST['mb_qa01'])           : "";
$mb_qa02           = isset($_POST['mb_qa02'])             ? trim($_POST['mb_qa02'])           : "";
$mb_qa03           = isset($_POST['mb_qa03'])             ? trim($_POST['mb_qa03'])           : "";
 
$sql = " insert into {$g5['member_addinfo']}
                set mb_id = '{$mb_id}',
                     mb_update_ip = '{$_SERVER['REMOTE_ADDR']}',
                     mb_qa01 = '{$mb_qa01}',
                     mb_qa02 = '{$mb_qa02}',
                     mb_qa03 = '{$mb_qa03}'
                     ";
 
                     sql_query($sql,true);
?>
중간생략

 

이렇게 했더니

 

insert into set mb_id = '', mb_update_ip = '::1', mb_qa01 = '없음', mb_qa02 = '예', mb_qa03 = '아니오'

 

1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'set mb_id = '', mb_update_ip = '::1', ...' at line 2

error file : /bbs/qa_update.php

 

이런 에러 문구가 뜨네요.

그리고, mb_id 값도 없구요.

어떻게 하면 될까요?

 

고수님들의 조언 부탁드립니다.

감사합니다.

 

이 질문에 댓글 쓰기 :

답변 3

$_POST[] 값으로 받기 위해서는 안의 값이 제대로 변수형태로 들어가있어야 합니다.

update 페이지에서 echo "<pre>".print_r($_POST)."</pre>"; exit; 해보시면 넘어간 모든 POST값을 확인할수 있을거에요

아마 100% mb_id값은 없을겁니다.

mb_id값을 그대로 가져오기 위해서는 
 

<input type="hidden" name="mb_id" value="<?php echo $_POST['$member["mb_id"]']; ?>">

 

이구문을 

 

 

<input type="hidden" name="mb_id" value="<?php echo $member["mb_id"]; ?>">

 

으로 하시면해결될거 같으네요

답변 감사드립니다.

스위트알데바란님께서 말씀하신데로 하니까 mb_id 값이 정상적으로 가져오네요.
감사합니다.

그런데...

답변 주신 분들 말씀 종합해서 밑에처럼 수정했습니다.

qa03.php 페이지에는


<input type="hidden" name="mb_id" value="<?php echo $member["mb_id"]; ?>"



$sql = " insert into {$g5['member_addinfo_table']}
이렇게 수정했습니다.

중간생략
그리고 맨 밑에

<!-- include your own success html here -->
 
if ($conn->query($sql) === TRUE) {
    echo "<script>location.href='/bbs/add_qa.php'</script>";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();



했더니 이런 문구가 뜨네요.

1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'set mb_id = 'abc1', mb_update_ip = '::1', ...' at line 2

error file : /bbs/qa_update.php

mb_id 값은 정상적으로 가져 오는 것 같습니다.
그런데, 계속 sql 쿼리 문법 오류라고 뜨는데 뭐가 오류가 난 지를 모르겠습니다.ㅠㅠ
무엇이 문제일까요?
추가 조언좀 부탁드리겠습니다.

그리고, dbconfig.php 파일에는 밑에처럼 추가 해 놓았습니다.

$g5['member_addinfo_table'] = G5_TABLE_PREFIX.'member_addinfo'; // 회원 추가 정보 테이블

추가로

db table create code는 아래로 되어 있습니다.


CREATE TABLE `g5_member_addinfo` (
	`mb_no` INT(11) NOT NULL AUTO_INCREMENT,
	`mb_id` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	`mb_datetime` TIMESTAMP NOT NULL DEFAULT current_timestamp(),
	`mb_qa01` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	`mb_qa02` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	`mb_qa03` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`mb_no`) USING BTREE,
	UNIQUE INDEX `mb_id` (`mb_id`) USING BTREE,
	INDEX `mb_datetime` (`mb_datetime`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

답이 나온거 같네요
$g5['member_addinfo_table'] = G5_TABLE_PREFIX.'member_addinfo'; // 회원 추가 정보 테이블
echo $g5['member_addinfo_table'];
해보시면
g5member_addinfo 라고 나올것 같은데요?

테이블생성은 g5_member_addinfo라고 하셨구요
쿼리문을 다 출력해보시고 sql 구문 실행해보시면 정확한 오류가 나올거에요.
테이블명이 없거나 잘못된 테이블이라고 뜰거 같아요
그리고 timestamp가 uniq로 잡혀있는데요
서버사양이 1core가 아니라면 적어도 스레드가 2개이상은 나올거 같아요
그러면 동시에 2개가 실행이 될수있겠지요
uniq값이 동시에 초까지동일하게 들어갈 수 있을거에요
그래서 uniq값을 제외하시는것을 권해드립니다.

table 정보가 없어서 에러가 난 것으로 보입니다.

A 테이블에 insert 쿼리 => 'insert into A ~ '

 

즉, $g5['member_addinfo'] 가 빈 값 상태이니,

이 부분을 확인해보는 것이 좋을 듯 싶습니다.

답변 감사드립니다.

답변 주신 분들 말씀 종합해서 밑에 처럼 수정했습니다.

qa03.php 페이지에는


<input type="hidden" name="mb_id" value="<?php echo $member["mb_id"]; ?>"



$sql = " insert into {$g5['member_addinfo_table']}
이렇게 수정했습니다.

중간생략
그리고 맨 밑에

<!-- include your own success html here -->
 
if ($conn->query($sql) === TRUE) {
    echo "<script>location.href='/bbs/add_qa.php'</script>";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();



했더니 이런 문구가 뜨네요.

1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'set mb_id = 'abc1', mb_update_ip = '::1', ...' at line 2

error file : /bbs/qa_update.php

mb_id 값은 정상적으로 가져 오는 것 같습니다.
그런데, 계속 sql 쿼리 문법 오류라고 뜨는데 뭐가 오류가 난 지를 모르겠습니다.ㅠㅠ
무엇이 문제일까요?
추가 조언좀 부탁드리겠습니다.

그리고, dbconfig.php 파일에는 밑에처럼 추가 해 놓았습니다.

$g5['member_addinfo_table'] = G5_TABLE_PREFIX.'member_addinfo'; // 회원 추가 정보 테이블

답변 감사드립니다.

말씀하신 Adminer 설치해서 들어갔더니
고도몰 호스팅을 사용하는데 글자가 다 깨지고

제 컴퓨터 환경인 XAMPP, HeidiSQL, VS Code 에서는 암호를 설정안했더니 로그인이 안되네요.
여기서는 글자가 깨지지 않거든요.

그래서,
암호 없이 로그인 하는 방법을 사용하기 위하여

login-password-less.php 파일과 plugin.php 파일은 다운로드 받아서 plugin 폴더에 넣었는데...

세팅하는 설명에 나와 있는 example 에서 보여지는 이 부분은 어디에 어떻게 사용하는 건가요?

제가 너무 초보다보니 이것 세팅하는 것도 힘드네요.
추가 조언 부탁드립니다.

감사합니다.



<?php
function adminer_object() {
	include_once "../plugins/plugin.php";
	include_once "../plugins/login-password-less.php";
	return new AdminerPlugin(array(
		// TODO: inline the result of password_hash() so that the password is not visible in source codes
		new AdminerLoginPasswordLess(password_hash("YOUR_PASSWORD_HERE", PASSWORD_DEFAULT)),
	));
}

include "./index.php";

DB 툴 설치건 관련해서는.. 더 이상 해드릴 이야기가 없습니다.
별도로 알아보셔야 할 것 같습니다.

SQL문 문법 에러 관련해서는..
SQL문을 출력하여 재질문해보는 방법이 있습니다.

지금의 글에서는..
"insert into set mb_id = '', mb_update_ip = '::1', mb_qa01 = '없음', mb_qa02 = '예', mb_qa03 = '아니오'" SQL문 정보가 있었고..
저는 이 SQL문을 보고 테이블명이 빠졌다라는 것을 알게 된 것입니다.
(재질문 내용에서는.. SQL 쿼리가 어떤지를 확인할 수 없습니다.)

추가로

db table create code는 아래로 되어 있습니다.


CREATE TABLE `g5_member_addinfo` (
	`mb_no` INT(11) NOT NULL AUTO_INCREMENT,
	`mb_id` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	`mb_datetime` TIMESTAMP NOT NULL DEFAULT current_timestamp(),
	`mb_qa01` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	`mb_qa02` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	`mb_qa03` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`mb_no`) USING BTREE,
	UNIQUE INDEX `mb_id` (`mb_id`) USING BTREE,
	INDEX `mb_datetime` (`mb_datetime`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'set mb_id = 'abc1', mb_update_ip = '::1', ...' at line 2"

에러 내용에 sql문 전체가 나오지 않았습니다.

"insert into ~ "

echo $sql;
로 전체 sql문이 필요합니다.

답변 감사드립니다.

말씀하신데로

qa_update.php 파일에 echo $sql; 를 밑에 처럼 추가해서


<?php
include_once('./_common.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
include_once(G5_LIB_PATH.'/register.lib.php');
include_once(G5_LIB_PATH.'/mailer.lib.php');
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
 
$mb_id               = isset($_POST['mb_id'])                 ? trim($_POST['mb_id'])               : "";
$mb_qa01           = isset($_POST['mb_qa01'])             ? trim($_POST['mb_qa01'])           : "";
$mb_qa02           = isset($_POST['mb_qa02'])             ? trim($_POST['mb_qa02'])           : "";
$mb_qa03           = isset($_POST['mb_qa03'])             ? trim($_POST['mb_qa03'])           : "";

//===============================================================

$sql = " insert into {$g5['member_addinfo']}
                set mb_id = '{$mb_id}',
                     mb_update_ip = '{$_SERVER['REMOTE_ADDR']}',
                     mb_qa01 = '{$mb_qa01}',
                     mb_qa02 = '{$mb_qa02}',
                     mb_qa03 = '{$mb_qa03}'
                     ";
 
                     sql_query($sql,true);

echo $sql;
?>

중간생략


놓고 해봤더니

insert into set mb_id = '', mb_update_ip = '::1', mb_qa01 = '없음', mb_qa02 = '예', mb_qa03 = '아니오'

1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'set mb_id = 'abc1', mb_update_ip = '::1', ...' at line 2

error file : /bbs/qa_update.php

추가 적인 내용은 없고 그 전과 똑같이 뜨네요.

혹시

<?php
include_once('./_common.php');
include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');
include_once(G5_LIB_PATH.'/register.lib.php');
include_once(G5_LIB_PATH.'/mailer.lib.php');
include_once(G5_LIB_PATH.'/thumbnail.lib.php');

이 부분이 잘못된건가요?
register_form_update.php 파일에서 윗부분을 가져온거거든요.

sql 접속이 안되서 에러가 나는가 생각이 들어서

include_once(/data/dbconfig.php');

를 밑에다 추가했더니 이 문구 자체가 에러가 나더라구요.

추가 조언좀 부탁드립니다.
여러가지로 해도 안되네요. ㅠㅠ
감사합니다.

insert문에 테이블명이 없습니다.

insert into set mb_id = '', mb_update_ip = '::1', mb_qa01 = '없음', mb_qa02 = '예', mb_qa03 = '아니오'

ex)
insert into g5_member set mb_nick = 'kkk' whrere mb_id = 'abc' (O)
insert into set mb_nick = 'kkk' whrere mb_id = 'abc' (X)

<해결책>
$sql = " insert into {$g5['member_addinfo']}
=>
$sql = " insert into g5_member_addinfo

$g5['member_addinfo'] <--- 이 값이 어느화일에 설정 되어있나요?

 

name="mb_id" value="<?php echo $_POST['$member["mb_id"]']; ?>" <--- $_POST['mb_id'] 같은데요?

$member["mb_id"] 이것은 로그인한 후 자신의 mb_id 값인데 저렇게 사용한다는 것이 말이 안되는 코드 입니다

 

 

답변 감사드립니다.

답변 주신 분들 말씀 종합해서 밑에 처럼 수정했습니다.

qa03.php 페이지에는


<input type="hidden" name="mb_id" value="<?php echo $member["mb_id"]; ?>"



$sql = " insert into {$g5['member_addinfo_table']}
이렇게 수정했습니다.

중간생략
그리고 맨 밑에

<!-- include your own success html here -->
 
if ($conn->query($sql) === TRUE) {
    echo "<script>location.href='/bbs/add_qa.php'</script>";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();



했더니 이런 문구가 뜨네요.

1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'set mb_id = 'abc1', mb_update_ip = '::1', ...' at line 2

error file : /bbs/qa_update.php

mb_id 값은 정상적으로 가져 오는 것 같습니다.
그런데, 계속 sql 쿼리 문법 오류라고 뜨는데 뭐가 오류가 난 지를 모르겠습니다.ㅠㅠ
무엇이 문제일까요?
추가 조언좀 부탁드리겠습니다.

그리고, dbconfig.php 파일에는 밑에처럼 추가 해 놓았습니다.

$g5['member_addinfo_table'] = G5_TABLE_PREFIX.'member_addinfo'; // 회원 추가 정보 테이블

추가로

db table create code는 아래로 되어 있습니다.


CREATE TABLE `g5_member_addinfo` (
	`mb_no` INT(11) NOT NULL AUTO_INCREMENT,
	`mb_id` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	`mb_datetime` TIMESTAMP NOT NULL DEFAULT current_timestamp(),
	`mb_qa01` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	`mb_qa02` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	`mb_qa03` VARCHAR(255) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`mb_no`) USING BTREE,
	UNIQUE INDEX `mb_id` (`mb_id`) USING BTREE,
	INDEX `mb_datetime` (`mb_datetime`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

답변을 작성하시기 전에 로그인 해주세요.
전체 211
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT