2013-07-03 76 views
1

我有我的查询,我想要做什么,但我想扩大这一点,并从stockpicks表抓住所有其他informatino。它现在的功能是匹配用户搜索股票代码,然后查询我的数据库以查看是否匹配,但不允许使用该表中的其他数据。这是我有变化之前:选择所有,并作为MYSQL查询

$sqlCommand = "(SELECT id, symbol as sym FROM stockpicks WHERE symbol LIKE '%$get_quote%')"; 

这是我一直在试图做的和我的问题。正如我以前说过,我想简单地调用所有信息的情况下,它是需要的,而不是仅仅呼吁符号

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as sym WHERE symbol LIKE '%hig%')' at line 1

$sqlCommand = "(SELECT * FROM stockpicks symbol as sym WHERE symbol LIKE '%$get_quote%')"; 

我得到这个错误。我不想将其他信息与搜索进行匹配,但我希望能够将其他数据与匹配结合使用来输出。如果这没有道理让我知道。感谢您提供的所有有用信息。它的无价之宝。 克里斯

编辑:表结构

ID |符号|入口|退出| openclosed |入口日期

为了更好地理解,我将包含整个脚本。我试图让变量可用,如果它是一个开放的位置。

<?php 
error_reporting(E_ALL^E_NOTICE); //this is for debugging, remove if you dont need anymore 
ini_set("display_errors", 1); //this is for debugging, remove if you dont need anymore 
$searchoutput = ""; 
$ticker = "goog"; 

if (isset($_POST['get_quote'])) { 
$ticker = $_POST['ticker']; 
} 

$open = fopen("http://quote.yahoo.com/d/quotes.csv?s=$ticker&f=sl1d1t1c1ohgv&e=.csv", "r"); 
$quote = fread($open, 1000); 

fclose($open); 

$quote = str_replace("\"", "", $quote); 
$quote = explode(",", $quote); 

$quote_0 = ($quote[0]); 
$quote_1 = ($quote[1]); 
$quote_2 = ($quote[2]); 
$quote_3 = ($quote[3]); 
$quote_4 = ($quote[4]); 
$quote_5 = ($quote[5]); 
$quote_6 = ($quote[6]); 
$quote_7 = ($quote[7]); 
$quote_8 = ($quote[8]); 

echo "<div class='symbol'><div class='quote'>Company: $quote_0</div></div>"; 
echo "<div class='leftofStocks'><div class='row'><div class='quote'>Last trade: $$quote_1</div>"; 
echo "<div class='quote'>Date: $quote_2</div>"; 
echo "<div class='quote'>Time: $quote_3</div>"; 
echo "<div class='quote'>From Previous: $$quote_4</div></div>"; 
echo "<div class='row'><div class='quote'>Open: $$quote_5</div>"; 
echo "<div class='quote'>High: $$quote_6</div>"; 
echo "<div class='quote'>Low: $$quote_7</div>"; 
echo "<div class='quote'>Volume: $quote_8</div></div>"; 

if (isset($_POST['get_quote']) && $_POST['get_quote'] != "") { 
$ticker = $_POST['ticker']; 
$get_quote = preg_replace('#[^a-z 0-9?!]#i', '', $_POST['ticker']); 

$sqlCommand = "(SELECT id, symbol as sym FROM stockpicks WHERE symbol LIKE '%$get_quote%')"; 

$sym = strtoupper($sym); 
$get_quote = strtoupper($get_quote); 
     include_once("storescripts/connect_to_mysql.php"); 
     $query = mysql_query($sqlCommand) or die(mysql_error()); 
$count = mysql_num_rows($query); 
if($count >= 1){ 
$search_output .= " 
<div class='rightOfStocks'><hr />It Looks like <strong>'$get_quote'</strong> is one of our stock picks<hr /> 


</div>"; 
while($row = mysql_fetch_array($query)){ 
      $id = $row["id"]; 

    $sym = $row["sym"]; 
    $sym = strtoupper($sym); 
    $search_output .= " 

    <div class='rightOfStocks'><h3>Our Pick</h3>$sym<br /> 
    <br />$$quote_1 
    </div>"; 
       } // close while 
} else { 
$search_output = " 
<div class='rightOfStocks'><hr />0 results for <strong>$get_quote</strong> 


<hr /></div>"; 
} 
} 

?>        
            <div class="form"> <form method="post" action="<?php echo $_SERVER['REQUEST_URI'];?>"> 
             Get Quote: <input type="text" size="10" maxlength="10" name="ticker"/> 
             <input type="submit" value="Get Quote" name="get_quote" /> 
             Enter any valid stock quote (ie. AAPL HOG RIMM):<br></form></div> 


             <!--left of stock results close--></div><!--left of stock results close--> 
             <?php echo $search_output ;?> 
           </div> 
+2

SELECT * FROM stockpicks ** symbol as sym ** WHERE,粗体部分是问题之一。你也必须读一些关于sql注入的内容。 – 2013-07-03 18:17:52

+0

你能展示你的表格结构吗?它看起来像是试图从两个表中获取信息,要做到这一点,你必须定义链接两个表之间相关记录的列 - 换句话说,就是'JOIN'条件。 –

回答

1

使用别名时,“as”关键字是可选的。所以它认为“符号”是“存货”的别名,但之后它不知道该做什么。

如果它的好它返回命名为标志字段,那么你只需要省略部分:

$sqlCommand = "(SELECT * FROM stockpicks WHERE symbol LIKE '%$get_quote%')"; 

如果你确实需要返回作为符号字段符号,那么这应该工作:

$sqlCommand = "(SELECT *, symbol as sym FROM stockpicks WHERE symbol LIKE '%$get_quote%')"; 
+0

太棒了。这似乎是我正在寻找的。我现在有能力抓住这些其他变量。这可能是一个标准问题,但如果它是一个varchar,可以操纵它吗?例如,如果我想添加另一个变量来包含基于雅虎抓取数据的入场价格和当前价格的任何收益? –

+0

我不确定我完全理解你的问题。如果你正在询问sql语句本身,那么也许试着重新回答你的问题,我会看看我能否提供帮助。如果你问的是PHP(或者你正在使用的任何语言),那么你可能不得不问问其他人。 – BVernon

+0

另外请注意,后面的sql语句将返回符号字段两次:一个叫做符号(来自*),然后是你作为sym的别名。 – BVernon

3
SELECT * FROM stockpicks symbol as sym WHERE symbol LIKE '%$get_quote%' 

应该

SELECT * FROM stockpicks as sym WHERE symbol LIKE '%$get_quote%' 

通常情况下,你可以通过只在错误所提到的语法看着面前追捕mysql的错误。在这种情况下,"FROM stockpicks symbol"正在将表stockpicks分配到假名"symbol",因此以下"AS sym"在语法上是错误的。考虑在此作业中运营商"AS"是可选的。 "FROM stockpicks symbol"意味着与"FROM stockpicks AS symbol"

相同的意思应该注意的是,在这种情况下分配一个别名是没有意义的,因为它没有被使用。但分配是错误的原因。