2012-05-23 5 views
0

이 스크립트를 사용하여 :SQL 쿼리 ODBC

<?php  
    $myfamille=$_POST['myfamille']; 

    $conn = odbc_connect('sage','<Administrateur>',''); 

    if (!$conn) 
    {exit("Connection Failed: " . $conn);} 




    $sql="Select F_ARTSTOCK.AR_Ref,AR_Design,AS_QteSto 
    FROM F_ARTICLE,F_FAMILLE,F_ARTSTOCK 
    where F_ARTICLE.FA_CodeFamille=F_FAMILLE.FA_CodeFamille 
    AND F_ARTICLE.AR_Ref=F_ARTSTOCK.AR_Ref 
    AND F_FAMILLE.FA_CodeFamille='".$myfamille."' 
    and F_ARTSTOCK.AS_QteSto <> 0"; 

    $rs=odbc_exec($conn,$sql); 
    if (!$rs) 
    {exit("Error in SQL");} 
    while($e=odbc_fetch_object($rs)) 
      {$output[]=$e;} 
    print(json_encode($output)); 
    ?> 

나에게이 오류 제공 :

Notice: Undefined variable: output in C:\wamp\www\articlecbase.php on line 24 

이 줄을 제거하여 코드 작업을하고 내가 모르는주의를 무슨 문제

AND F_FAMILLE.FA_CodeFamille='".$myfamille."' 

또한 비슷한 스크립트를 가지고 있지만 SQL Server와 잘 작동합니다.

ODBC와
<?php 
$myservername=$_POST['myservername']; 
$servername=".\\".$myservername; 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 
$db_name="bijou"; 
$myfamille=$_POST['myfamille']; 
    $connectionInfo = array("Database"=>$db_name, "UID"=>$myusername, "PWD"=>$mypassword); 
$conn = sqlsrv_connect($servername, $connectionInfo); 

if (!$conn) 
{exit("Connection Failed: " . $conn);} 


$sql="Select F_ARTSTOCK.AR_Ref,AR_Design,AS_QteSto FROM F_Article,F_Famille,F_ARTSTOCK 
where F_ARTICLE.FA_CodeFamille=F_FAMILLE.FA_CodeFamille 
AND F_ARTICLE.AR_Ref=F_ARTSTOCK.AR_Ref 
AND F_FAMILLE.FA_CodeFamille='".$myfamille."' and F_ARTSTOCK.AS_QteSto != .000000"; 


$rs=sqlsrv_query($conn,$sql); 
if (!$rs) 
{exit("Error in SQL");} 

while($e=sqlsrv_fetch_object($rs)) 
     { $output[]=$e;} 

print(json_encode($output)); 
?> 

이 또한 작동 :

 <?php  
$myusername=$_POST['myusername']; 
$conn = odbc_connect($myusername,'<Administrateur>',''); 

if (!$conn) 
{exit("Connection Failed: " . $conn);} 

$sql="SELECT FA_CodeFamille AS FA_CodeFamille,FA_Intitule AS FA_Intitule FROM F_FAMILLE"; 
$rs=odbc_exec($conn,$sql); 

if (!$rs) 
{exit("Error in SQL");} 
while($e=odbc_fetch_object($rs)) 
     { $output[]=$e;} 
print(json_encode($output)); 

?> 

저를 도와주세요. 관련

$output = array(); 
while($e=odbc_fetch_object($rs)) { 
    $output[] = $e; 
} 


내가 당신이 그것을 사용하기 전에 변수가 선언되지 않았기 때문에 어떤 도움이

답변

3

PHP는 불평하시기 바랍니다 이 많은 스크립트에 잘 노력하고 있습니다. while 루프를 입력하지 않은 경우

$output = array(); 
while($e=odbc_fetch_object($rs)) { 
    $output[] = $e; 
} 

그렇지 않으면, 변수가 선언되지 않으며, 따라서 당신은 json_encode($output), output이 존재하지 않는 경우.

또한 이전 ODBC 접근 방식을 포기하고 PDO (또는 적어도 PDO ODBC 드라이버)를 사용하는 것이 좋습니다.

또한 코드는 SQL 삽입에 개방되어 있습니다. 준비된 문을 사용하거나 보간 한 문자열을 쿼리로 올바르게 이스케이프해야합니다. 즉, odbc_prepare

또한 살펴 봐야합니다. $ _POST [ 'key']는 채워지지 않습니다. 사용자가 PHP가로 분석했다

$blah = (array_key_exists($_POST['blah']) && is_string($_POST['blah'])) ? $_POST['blah'] : null; 

경우 : 당신은 내가 같이 특히 편집증 환자 인 경우,

$blah = (isset($_POST['blah'])) ? $_POST['blah'] : null; 

또는

$blah = (array_key_exists($_POST['blah'])) ? $_POST['blah'] : null; 

또는 : 당신은 항상 같은 것을 사용한다 배열에서 함수에 배열을 전달하면 오류가 발생할 수 있습니다. 이렇게하면 PHP가 불필요한 통지/오류를 생성 할 수 있으므로 이러한 가능성을 피하고 싶습니다. [] SQLSRV과 그와 같은 스크립트를 사용하여 또한 임에 유의하십시오 :

나는이 결과를 얻을 outpout 변수 가 선언 한 후, 하이

+0

(배열로 $_GET['test'] 강제의 예는 page.php?test[]=blah 것) 잘 작동합니다. – user1413631

+0

@ user1413631 즉, 쿼리 결과가 반환되지 않습니다. 내 게시물에 – Corbin

+0

쿼리 에서이 라인을 제거했다 및 F_FAMILLE.FA_CodeFamille = ' ". $ myfamille." ' 이 스크립트는 으로 작동하지만 sqlsrv를 사용할 때 작동합니다 (수정 된 게시물 참조) – user1413631