2013-10-28 2 views
-1

우선, 스택 오버플로의 여러 위치에서이 문제를 보았습니다. 가버 리다. 이 특정 문제에 대한 일부 정보는 다음과 같습니다 :PDOException - SQLSTATE [42S22] : 열을 찾을 수 없습니다 : 1054 알 수없는 'Where 절에서'MyDataValue '

CREATE TABLE IF NOT EXISTS `energymeter`.`Node` (
    `node_id` INT NOT NULL AUTO_INCREMENT , 
    `node_name` VARCHAR(7) NOT NULL , 
    PRIMARY KEY (`node_id`) , 
    UNIQUE INDEX `node_name_UNIQUE` (`node_name` ASC)) 
ENGINE = InnoDB; 

아래 코드는 어디 :

아래의 코드는 내가 (필자는 특정 레코드를 삽입 할 위치) 테이블을 만드는 데 사용되는 MySQL의 코드

$node_name_value = $line_of_text[2]; // In this example, the value would be 'MyDataValue' 
$insert_demand_record = $conn->prepare("INSERT INTO Demand (date, time, trading_period, demand_value, Node_node_id) VALUES (STR_TO_DATE('$date', '%d %M %Y'), STR_TO_DATE('$time', '%k:%i:%s'), $trading_period, $demand_value, (SELECT Node.node_id FROM Node WHERE Node.node_name = $node_name_value))"); 
$insert_demand_record->execute(); 

편집이 : 그것은 (스레드 제목에 주어진 오류가 발생합니다) 실패한 것으로 보인다 추가 테스트 후, 위의 코드를 변경하면 작동하지 않습니다,하지만 난 변화 (아래의 코드를 변경하는 경우 '$ node_name_value 값)로 변경하면 값이 t에서 변경되는 것을 볼 수 있습니다. 그는 브라우저 (예 : 나는 'SomeRandomValue'에 $ node_name_value를 설정 한 경우, 오류가 ... 누군가가이 문제 좀 도와 수 있다면, 즉 많이 주시면 감사하겠습니다

//Ignoring items of same name that already exist (since there is a UNIQUE constraint 
//on the 'node_name' column. 
$insert_stmt = $conn->prepare('INSERT IGNORE INTO Node(node_name) VALUES(:node_value)'); 

//Bind the node name with the query 
$node_name_value = $line_of_text[2]; 
$insert_stmt->bindParam(':node_value', $node_name_value); 

//Execute PDO insert statement 
$insert_stmt->execute(); 

'알 수없는 열'SomeRandomValue '같은 것!

+5

그 검색어에 WHERE 절도 없기 때문에 틀린 검색어를보고 계실 것입니다. ... – CBroe

+0

@CBroe 죄송합니다. 지금 게시물을 업데이트했습니다 ... PDO를 사용하여 내부 SELECT 문을 수행 할 수 있는지 확실하지 않습니다. ... – Rob

+1

'Node.node_name = "$ node_name_value"'값을 인용 할 필요가 있지만 실제로는 [prepared 명세서] (http://php.net/manual/en/pdo.prepared-statements.php) –

답변

-1

다음 코드는 편집을 제안하기위한 ... 일들이 나를 위해 일하는 사용자 Burhan입니다 칼리드 '에

$insert_demand_record = $conn->prepare("INSERT INTO Demand (date, time, trading_period, demand_value, Node_node_id) VALUES (STR_TO_DATE('$date', '%d %M %Y'), STR_TO_DATE('$time', '%k:%i:%s'), $trading_period, $demand_value, (SELECT Node.node_id FROM Node WHERE Node.node_name = :node_name_value))"); 

$insert_demand_record->bindValue(':node_name_value', $node_name_value, PDO::PARAM_STR); 
$insert_demand_record->execute(); 

감사를 만들기 위해 관리 - 지금 ... 더 준비된 문을 사용하는 것입니다

+0

따옴표가 아닌 준비된 문구를 사용해야합니다. –

+0

@YourCommonSense 죄송합니다. 처음에는 무엇을 넣어야했는지에 대한 답변을 업데이트했습니다 ... – Rob

+0

매우 엄격하기 때문에 미안하지만 역동적 인 문자열과 숫자 리터럴 모두에 대해 자리 표시자를 사용해야합니다. –

관련 문제