使用ODBC的SQL查询

时间:2012-05-23 21:24:11

标签: php 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,它工作正常

<?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));
?>

这也与odbc有效:

     <?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;
}

我的许多脚本都运行良好 任何帮助,请

1 个答案:

答案 0 :(得分:3)

PHP抱怨,因为在使用变量之前未声明该变量。

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

否则,如果从未输入while循环,则不会声明变量,因此当您json_encode($output)时,output不存在。

另外,我建议你放弃旧的ODBC方法,转向PDO(或者至少是PDO ODBC驱动程序)。

此外,您的代码对SQL注入开放。您应该使用预准备语句或正确地将插入的字符串转义到查询中。也就是说,您应该查看odbc_prepare

此外,永远不会保证$ _POST ['key']被填充。你应该总是使用类似的东西:

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

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

或者,如果你像我一样特别偏执:

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

如果用户将PHP解析为数组,则可以通过将数组传递给函数来发生错误。这可能会使PHP不必要生成通知/错误,所以我想避免这种可能性。

(强制$_GET['test']成为数组的示例是page.php?test[]=blah