2013-06-13 2 views
1

테이블의 데이터 대신 결과를 반환하는 SQL 쿼리에 문제가 있습니다. DB에 두 개의 테이블이 있습니다. 하나는 제품 용이고 다른 하나는 바구니입니다. 아이디어는 바스켓에서 제품 ID를 가져 와서 나머지 모든 데이터를 제품 테이블에서 검색하는 것입니다. 이것은 내가 한 일입니다 :SQL 쿼리 후 Html 테이블이 빈 값으로 반환됩니다.

$sql = sprintf("SELECT * FROM Basket"); 

$result = mysql_query($sql, $link); 

while ($row = mysql_fetch_array($result)) { 

$my_id = $row["Id"]; 

$prod_s=sprintf("SELECT * FROM Products WHERE Id='%s'",$my_id) ; 
$prod= mysql_fetch_array($prod_s); 

echo "<td>" . htmlentities($prod["Name"],ENT_QUOTES,"UTF-8") . "</td>"; 
echo "<td>" . htmlentities($prod["Size"]) . "</td>"; 

. . . 테이블을 만들지 만 모든 필드가 비어 있습니다.

감사합니다.

+0

SELECT *를 사용하지 말고 대신 SELECT ID를 사용해야합니다. – Sam

+0

이 스크립트가 아닌 일반적인 오래된 SQL 쿼리를 사용하여 원하는 데이터를 쿼리 할 수 ​​있습니까? 설명에 제시된 것 이상으로 여기에서 더 많은 일을하려고하는 것처럼 보입니다. 출력에 HTML을 포함하고 있기 때문에 다시 검토해야 할 사항이 있습니다. – Derek

답변

1

우선 현재 코드는 2 차 수준의 SQL 주입에 취약합니다. 데이터베이스의 ID 중 하나가 악의적 인 문자열 (예 : good old ; DROP DATABASE foo) 인 경우 사용자가 실수합니다.

이제 실제 문제는 두 번째 쿼리를 SQL 서버에 보내지 않고 있다는 것입니다. mysql_query()을 실행하고 결과 핸들을 mysql_fetch_array과 함께 사용하는 것이 좋습니다. 초기 쿼리를 사용하여 이미 올바르게 수행하고 있습니다. 다시 똑같은 일을하십시오.

마지막으로 조인을 사용하여이 모든 작업을 단일 SQL 쿼리에서 수행 할 수 있습니다. 당신은 그들에 관하여 당신의 마음에 드는 검색 엔진을 요구하고 싶을 수도있다. 행운을 빕니다!

1

나는 아직도 prod_s에 mysql_query를 추가해야한다고 생각한다.

$my_id = $row["Id"]; 

    $prod_s=sprintf("SELECT * FROM Products WHERE Id='%s'",$my_id) ; 
    $prod_q=mysql_query($prod_s); 
    $prod= mysql_fetch_array($prod_q); 

    echo "<td>" . htmlentities($prod["Name"],ENT_QUOTES,"UTF-8") . "</td>"; 
    echo "<td>" . htmlentities($prod["Size"]) . "</td>"; 
+0

@ user2483939 질문에 대한 답변을 수락하십시오. 조언을 구한 다음 대답을 받아들이지 마십시오. 그것은 당신을 인정받지 못하는 것처럼 보입니다. – notblakeshelton

관련 문제