2013-04-04 37 views
0

这是我的php code.Browser正在生成警告,当我试图执行代码时。在查询中放置字符串时出现解析错误

<?php 
include("config.inc.php"); 


$link = mysql_connect('localhost', 'root', '') 
or die('Could not connect: ' . mysql_error()); 
echo 'Connected successfully'; 

mysql_select_db('lookup') or die('Could not select database'); 

$query = 'SELECT airport_id FROM airport'; 
$result = mysql_query($query) or die('Query failed: ' . mysql_error()); 

echo "<table>\n"; 

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
echo "\t<tr>\n"; 
foreach ($line as $col_value) 
{ 
    echo "\t\t<td>$col_value</td>\n"; 
    $query1= 'SELECT distinct c.airport_ident,c.star_ident,c.fix_ident from corept.std_star_leg c 
    INNER JOIN 
    (SELECT star_ident,transition_ident,max(sequence_num) seq,route_type 
     FROM corept.std_star_leg 
     WHERE data_supplier='J' AND airport_ident='$col_value' 
     GROUP BY star_ident,transition_ident)b 
     ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
     WHERE c.data_supplier='J' AND c.airport_ident='$col_value' AND 

     NOT EXISTS 

    (SELECT name,trans FROM skyplan_deploy.deploy_stars d 
     WHERE d.apt=$col_value AND d.name!=d.trans 
     AND c.star_ident=d.name and c.fix_ident=d.trans) 

     UNION 

    SELECT apt,name,trans FROM skyplan_deploy.deploy_stars d WHERE apt='$col_value' AND name!=trans 
    AND 

    NOT EXISTS 

    (SELECT distinct c.star_ident,c.fix_ident from corept.std_star_leg c 
    INNER JOIN 
    (SELECT star_ident,transition_ident,max(sequence_num) seq,route_type FROM corept.std_star_leg 
     WHERE data_supplier='J' AND airport_ident='$col_value' 
     GROUP BY star_ident,transition_ident)b 
     ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
     WHERE c.data_supplier='J' AND c.airport_ident=$col_value AND d.name=c.star_ident AND d.trans=c.fix_ident)'; 

    $result1 = mysql_query($query1) or die('Query failed: ' . mysql_error()); 
    while ($line1 = mysql_fetch_array($result1, MYSQL_ASSOC)) 
    { 
    echo "\t<tr>\n"; 
    foreach ($line as $col_value) 
    { 
    echo "\t\t<td>$col_value</td>\n"; 
    echo "\t</tr>\n"; 
    } 
    } 
echo "\t</tr>\n"; 
}} 
echo "</table>\n"; 

mysql_free_result($result); 

mysql_close($link); 
?> 

当我试图执行上面的代码是在生成22行,其中i包括$ col_value到我query.Please帮我纠正你it.Thank警告。

回答

2

你缺少的连接(.)操作:

$str = "Part 1" . $value . "Part 2"; 

但是,请不要这样的查询,使用parameter binding代替。此类代码会导致攻击和/或轻微的性能下降。

+0

+1提的SQL注入攻击。 – 2013-04-04 06:54:18

0

使用此查询。问题在于你开始使用'的字符串,并在变量周围使用了',但忘记了逃避它们。

$query1= "SELECT distinct c.airport_ident,c.star_ident,c.fix_ident from corept.std_star_leg c 
INNER JOIN 
(SELECT star_ident,transition_ident,max(sequence_num) seq,route_type 
    FROM corept.std_star_leg 
    WHERE data_supplier='J' AND airport_ident='$col_value' 
    GROUP BY star_ident,transition_ident)b 
    ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
    WHERE c.data_supplier='J' AND c.airport_ident='$col_value' AND 

    NOT EXISTS 

(SELECT name,trans FROM skyplan_deploy.deploy_stars d 
    WHERE d.apt=$col_value AND d.name!=d.trans 
    AND c.star_ident=d.name and c.fix_ident=d.trans) 

    UNION 

SELECT apt,name,trans FROM skyplan_deploy.deploy_stars d WHERE apt='$col_value' AND name!=trans 
AND 

NOT EXISTS 

(SELECT distinct c.star_ident,c.fix_ident from corept.std_star_leg c 
INNER JOIN 
(SELECT star_ident,transition_ident,max(sequence_num) seq,route_type FROM corept.std_star_leg 
    WHERE data_supplier='J' AND airport_ident='$col_value' 
    GROUP BY star_ident,transition_ident)b 
    ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
    WHERE c.data_supplier='J' AND c.airport_ident=$col_value AND d.name=c.star_ident AND d.trans=c.fix_ident)"; 
+0

@ user2037445你的问题解决了吗? – 2013-04-04 06:52:10

+0

谢谢..它工作..但查询被取代为OOC我需要被替换为'OOC'。我可以怎么做? – user2037445 2013-04-04 06:54:03

+0

放'$ col_value'内'“”',这将是'“$ col_value''那么它将被替换为'” OOC'' – 2013-04-04 06:56:11

0

您使用了错误的引号。请在下面的查询

$query1= "SELECT distinct c.airport_ident,c.star_ident,c.fix_ident from corept.std_star_leg c 
     INNER JOIN 
     (SELECT star_ident,transition_ident,max(sequence_num) seq,route_type 
      FROM corept.std_star_leg 
      WHERE data_supplier='J' AND airport_ident='$col_value' 
      GROUP BY star_ident,transition_ident)b 
      ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
      WHERE c.data_supplier='J' AND c.airport_ident='$col_value' AND 

      NOT EXISTS 

     (SELECT name,trans FROM skyplan_deploy.deploy_stars d 
      WHERE d.apt=$col_value AND d.name!=d.trans 
      AND c.star_ident=d.name and c.fix_ident=d.trans) 

      UNION 

     SELECT apt,name,trans FROM skyplan_deploy.deploy_stars d WHERE apt='$col_value' AND name!=trans 
     AND 

     NOT EXISTS 

     (SELECT distinct c.star_ident,c.fix_ident from corept.std_star_leg c 
     INNER JOIN 
     (SELECT star_ident,transition_ident,max(sequence_num) seq,route_type FROM corept.std_star_leg 
      WHERE data_supplier='J' AND airport_ident='$col_value' 
      GROUP BY star_ident,transition_ident)b 
      ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
      WHERE c.data_supplier='J' AND c.airport_ident=$col_value AND d.name=c.star_ident AND d.trans=c.fix_ident)"; 
0

尝试用这个替换您的查询:

$query1= 'SELECT distinct c.airport_ident,c.star_ident,c.fix_ident from corept.std_star_leg c 
    INNER JOIN 
    (SELECT star_ident,transition_ident,max(sequence_num) seq,route_type 
     FROM corept.std_star_leg 
     WHERE data_supplier="J" AND airport_ident='.$col_value.' 
     GROUP BY star_ident,transition_ident)b 
     ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
     WHERE c.data_supplier="J" AND c.airport_ident='.$col_value.' AND 

     NOT EXISTS 

    (SELECT name,trans FROM skyplan_deploy.deploy_stars d 
     WHERE d.apt=$col_value AND d.name!=d.trans 
     AND c.star_ident=d.name and c.fix_ident=d.trans) 

     UNION 

    SELECT apt,name,trans FROM skyplan_deploy.deploy_stars d WHERE apt='.$col_value.' AND name!=trans 
    AND 

    NOT EXISTS 

    (SELECT distinct c.star_ident,c.fix_ident from corept.std_star_leg c 
    INNER JOIN 
    (SELECT star_ident,transition_ident,max(sequence_num) seq,route_type FROM corept.std_star_leg 
     WHERE data_supplier="J" AND airport_ident='.$col_value.' 
     GROUP BY star_ident,transition_ident)b 
     ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
     WHERE c.data_supplier="J" AND c.airport_ident=$col_value AND d.name=c.star_ident AND d.trans=c.fix_ident)'; 
+0

谢谢you..it worked..but查询被越来越更换为OOC我需要的是被替换为“我OOC'.How能做到这一点? – user2037445 2013-04-04 06:51:57

+0

你的意思是什么? – AlphaMale 2013-04-04 06:56:44

+0

我在查询中遇到错误.. col_value是一个字符串,它必须在查询中替换为'col_value',这样查询才能正常工作 – user2037445 2013-04-04 06:58:54

0

我认为错误在于在你的查询字符串。试试这个:

$query1= "SELECT distinct c.airport_ident,c.star_ident,c.fix_ident from corept.std_star_leg c 
    INNER JOIN 
    (SELECT star_ident,transition_ident,max(sequence_num) seq,route_type 
     FROM corept.std_star_leg 
     WHERE data_supplier='J' AND airport_ident='".$col_value."' 
     GROUP BY star_ident,transition_ident)b 
     ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
     WHERE c.data_supplier='J' AND c.airport_ident='".$col_value."' AND 

     NOT EXISTS 
(SELECT name,trans FROM skyplan_deploy.deploy_stars d 
    WHERE d.apt=$col_value AND d.name!=d.trans 
    AND c.star_ident=d.name and c.fix_ident=d.trans) 

    UNION 

SELECT apt,name,trans FROM skyplan_deploy.deploy_stars d WHERE apt='".$col_value."' AND name!=trans 
AND 

NOT EXISTS 

(SELECT distinct c.star_ident,c.fix_ident from corept.std_star_leg c 
INNER JOIN 
(SELECT star_ident,transition_ident,max(sequence_num) seq,route_type FROM corept.std_star_leg 
    WHERE data_supplier='J' AND airport_ident='".$col_value."' 
    GROUP BY star_ident,transition_ident)b 
    ON c.sequence_num=b.seq AND c.star_ident=b.star_ident AND c.transition_ident=b.transition_ident 
    WHERE c.data_supplier='J' AND c.airport_ident='".$col_value."' AND d.name=c.star_ident AND d.trans=c.fix_ident)" 

你不能只在你的查询中包含变量。在把它放在php之前,在后端测试你的查询。