2013-12-12 6 views
-1

내 두 DB 배열 :PHP, mySQL. SELECT 문 잘못된

ORDER -> (ID, CUSTOMER_ID)

고객 -> (ID, 이름)

그들은 외래 키가 (order.customer_id 및 고객 .신분증).

나는 텍스트 필드와 제출 단추가있는 html 양식을 가지고 있는데,이 사용자는 고객의 이름을 알려주고 쿼리에서 선택한 고객의 주문을 받고 싶습니다. 이것은 내 코드입니다. SELECT 문에 오류가 있습니다. 사람이 도움을 줄 수 있다면 ...

 <?php 

$connect = mysql_connect("localhost", "root", "") or die("Unable to connect to MySQL"); 

$selected = mysql_select_db("eshop", $connect) or die("Could not select examples"); 

if (isset($_POST['name'])) { 
$customerName = $_POST['name']; 
} 


$result = mysql_query("SELECT order.id 
        FROM order, customer    
        WHERE order.customer_id = customer.id 
        AND customer.name = $customerName 
        ");   



if($result === FALSE) { 
die(mysql_error()); // TODO: better error handling 
} 
while($row = mysql_fetch_array($result)) 
{ 
echo $row['order.id']; 

} 

mysql_close($connect); 
?> 
+3

** ** 더 많은 SQL 인터페이스 코드를 작성하기 전에 심각한 [SQL 주입 버그]가 발생하지 않도록 [올바른 SQL 이스케이프] (http://bobby-tables.com/php)를 읽어야합니다 http://bobby-tables.com/). 또한, mysql_query는 새로운 애플리케이션에서 사용되어서는 안된다. PHP의 향후 버전에서 제거되는 비추천 인터페이스입니다. [PDO와 같은 현대적인 대체물은 배우기 어렵지 않습니다.] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/). [PHP The Right Way] (http://www.phptherightway.com/)와 같은 안내서는 이와 같은 실수를 피하는 데 도움이됩니다. – tadman

+0

$ customerName은 누군가가 당신에게 도착하기 전에 – rray

+0

[** 읽으십시오 (진행되기 전에) **] (http://stackoverflow.com/q/60174/1415724)의 경우에만 안에 존재합니다. 그리고 당신이 독서 분위기에있을 때 [** this too **] (https://www.owasp.org/index.php/Top_10_2013-Top_10) –

답변

2

orderreserved word, 그래서 그것을 포장 역 따옴표를 사용합니다. 즉 : `order`

$result = mysql_query("SELECT `order`.id 
     FROM `order`, customer 
     WHERE `order`.customer_id = customer.id 
     AND customer.name = '$customerName' 
     "); 

코드 :

 if (isset($_POST['name'])) { 
      $customerName = trim($_POST['name']); 

      $result = mysql_query("SELECT `order`.id as OrderId 
        FROM `order`, customer 
        WHERE `order`.customer_id = customer.id 
        AND customer.name = '$customerName' 
        ") or die(mysql_error());    

      while($row = mysql_fetch_array($result)) 
      { 
       echo $row['OrderId']; 

      }    
     } 

참고 : 사용 mysqli_ * 대신 mysql_로의 기능이나 PDO가 * 기능 (사용되지 않음)

+0

고마워요 !! 나는 당신에게 묻고 싶다 : 1) "SELECT'order'.id"를 OrderId로 말하면, "$ $ [[OrderId ']]를 echo 할 때 문제가 생길 것이기 때문에" 2) Alex Alexiou라는 이름처럼 DB에 데이터를 저장할 때이 이름이 DB에 한 단어로 저장됩니까? 그래서 "trim()"을 사용하셨습니까? – user2250119

+0

inputfiled에서 공백을 피하기 위해 트림을 사용하는 이유. –

0

베어 최소한의 질의 변화 최종 사용자의 경우 (변수 문자열의 인용 부호 추가)

$result = mysql_query("SELECT order.id 
        FROM order, customer    
        WHERE order.customer_id = customer.id 
        AND customer.name = '$customerName' 
        ");   

어쨌든 탈출은 매우 중요합니다.

0

$result = mysql_query("SELECT order.id 
        FROM order, customer    
        WHERE order.customer_id = '$customer.id' 
        AND customer.name = '$customerName' 
        "); 

을 시도하고 따옴표

0

귀하의 답변에 대한 감사에 삽입 고객 ID에 대한 변수를 선언하려고합니다. 나는 대학에있는 선생님들이 내가 게시 한 것처럼 SQL에 대한 잘못된 접근법을 사용하기 때문에 조금 실망 스럽다. 이것은 학기 과정을위한 것입니다. 어쨌든 고마워!