2010-07-31 5 views
0

왜 이것이 실패입니까? 올바른 db에 연결되어 있고 키가 확실히 있습니다.mysqli 준비 명령문을 사용하여 일부 알 수없는 이유로 실패했습니다

//verify key against key list in database 
if ($prep_statement = $db->prepare("SELECT id FROM key_list WHERE keys=?")) 
{ 
    $prep_statement->bind_param('s',$key); 
    $prep_statement->execute(); 
    echo $prep_statement->num_rows; 
    $prep_statement->close(); 
} else { 
    printf("Prepared Statement Error: %s\n", $db->error); 
    die();  
} 

나는 다음과 같은 오류가 발생하고, if 문은 반환 거짓

Prepared Statement Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key=?' at line 1 

여기 내 테이블 구조입니다 :

-- MySQL dump 10.11 
-- 
-- Host: localhost Database: gameserverdev 
-- ------------------------------------------------------ 
-- Server version 5.0.51a-24+lenny4 

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 
/*!40103 SET @[email protected]@TIME_ZONE */; 
/*!40103 SET TIME_ZONE='+00:00' */; 
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; 

-- 
-- Table structure for table `key_list` 
-- 

DROP TABLE IF EXISTS `key_list`; 
SET @saved_cs_client  = @@character_set_client; 
SET character_set_client = utf8; 
CREATE TABLE `key_list` (
    `id` bigint(20) unsigned NOT NULL auto_increment, 
    `keys` char(16) NOT NULL, 
    `datetime_registered` datetime NOT NULL, 
    `banned` tinyint(1) NOT NULL, 
    `comment` char(255) default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; 
SET character_set_client = @saved_cs_client; 

-- 
-- Dumping data for table `key_list` 
-- 

LOCK TABLES `key_list` WRITE; 
/*!40000 ALTER TABLE `key_list` DISABLE KEYS */; 
INSERT INTO `key_list` VALUES (2,'1111222233334444','2010-07-31 16:04:30',0,NULL); 
/*!40000 ALTER TABLE `key_list` ENABLE KEYS */; 
UNLOCK TABLES; 

-- 
-- Dumping routines for database 'gameserverdev' 
-- 
DELIMITER ;; 
DELIMITER ; 
/*!40103 SET [email protected]_TIME_ZONE */; 

/*!40101 SET [email protected]_SQL_MODE */; 
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */; 
/*!40014 SET [email protected]_UNIQUE_CHECKS */; 
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 
/*!40111 SET [email protected]_SQL_NOTES */; 

-- Dump completed on 2010-07-31 23:00:56 

답변

0

당신은 결과 결합되어, a parameter 바인딩하지 . bind_resultbind_param으로 변경하면 제대로 작동합니다.


key는 MySQL을 reserved word이다. 예약어가 아닌 항목으로 열 이름을 변경하거나 견적을 제출해야합니다. MySQL에서 default identifier quote character은 백틱 인 `이지만 ANSI 지수가 사용 가능한 경우 큰 따옴표 "을 대신 사용할 수 있습니다.

그래서, 당신의 문이 있어야합니다 : 내 코드를 수정했습니다

SELECT id FROM key_list WHERE `key` = ? 
+0

. 같은 오류. 업데이트 된 원본 게시물. – Eric

+0

A-ha, 전에 알지 못했지만 예약어를 사용하고 있습니다. 답변이 업데이트되었습니다. – Charles

+0

지금 사용하십시오. 나는 키와 키를 모두 시험해 봤지만 분명히 둘 다 예약되어있다. 감사!! – Eric

관련 문제