Furcsa MySQL error

szavazat
0

A következő kódrészletet kap egy oldalon keresztül curl, kivonatok néhány szálat belőle, és meg kell frissíteni néhány MySQL oszlopokat.

A problémám az, hogy a következő kód vagyok egy hiba (lásd az outputalábbiakban).

Amikor a másolás / beillesztés a lekérdezést, és tegyük a SQL szerkesztő a phpmyadmin, tökéletesen működik. Továbbá, ha azt cserélje ki a paramétereket $priceés $stockidaz én kódot a tényleges számok, amelyek szerepelnek a kimenet, akkor is működik. Ez hogy lehetséges?

Ha úgy érzem hiányzik valami hülyeséget.

$q = mysql_query(SELECT STOCK_TRADE_NAME,STOCK_ID FROM current_stocks WHERE STOCK_COUNTRY_ID = 7 LIMIT 1,9);
while ($row = mysql_fetch_array($q)) {
    $stockid = $row['STOCK_ID'];
    $url = http://www.some.url.com/?stock_name= . $row['STOCK_TRADE_NAME'];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    $dom = new simple_html_dom;
    $dom->load($output);
    foreach($dom->find('span.amount') as $e) {
        $price = str_replace(',','',$e->outertext);
    }
    foreach($dom->find('tr.even') as $f) {
        if (strstr($f->outertext,'<td class=name>Open</td>')) {
            $exp = explode('<td class=value>',$f->outertext);
            $open = str_replace('</td>','',$exp[1]);
        }
    }
    echo $stockid .   . $price . <br>;
    mysql_query(UPDATE current_stocks SET STOCK_CURRENT_PRICE = $price WHERE STOCK_ID = $stockid) or die(mysql_error());
    $ch=;  
    $dom=;

}

output :

345 11.300
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 '11.300 WHERE STOCK_ID = 345' at line 1

Megjegyzés: STOCK_ID az INT (11), STOCK_CURRENT_PRICE decimális (8,3)

Megjegyzés2: én vagyok a legújabb MySQL / PhpMyAdmin / PHP verzió.

UPDATE :

Módosítja a lekérdezés erre:

$q2 = UPDATE current_stocks SET STOCK_CURRENT_PRICE = ' . $price . ' WHERE STOCK_ID = ' . $stockid . ';
mysql_query($q2) or die(mysql_error());

Eltávolítja a hibaüzenet, de nem frissíti a db.

A kérdést 12/06/2011 13:59
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
0

Próbálja kapszulázó $priceidézőjelbe: '$price';

Válaszolt 12/06/2011 14:03
a forrás felhasználó

szavazat
0

tűzoltás: hozzátéve '', hogy a lekérdezés:

 mysql_query("UPDATE current_stocks SET STOCK_CURRENT_PRICE = '$price' WHERE STOCK_ID = '$stockid'") or die(mysql_error());

jobb: használjon paraméterezett lekérdezés, így a tartalom és a logika egymástól: ha nem lesz ez a probléma, és kap egy fix lehetséges injekciók ingyenes :)

Válaszolt 12/06/2011 14:06
a forrás felhasználó

szavazat
0

Ha hozzá idézetek nem változtat semmit, ellenőrizze a szóköz karaktert - talán még benne $price. Van egy rejtett fül vagy visszatérő, amely nem látható a html?

Próbáljon ki valami hasonló $price = preg_replace("/'\s+'", '', $price);(nincs tesztelve).

Válaszolt 12/06/2011 14:10
a forrás felhasználó

szavazat
-2

Azt hiszem, ezt a kódsort a kérdés:

mysql_query("UPDATE current_stocks SET STOCK_CURRENT_PRICE = $price WHERE STOCK_ID = $stockid")

Nem lehet hivatkozni php változókat mysql lekérdezés, hanem inkább ki kell használni a sprintf paranccsal hozzon létre egy szöveget, amelyet azután a mysql adatbázis.

Tehát Ön keresett kell:

$query = sprintf("Update current_stocks set stock_current_price = '%s' where stock_id = '%s'", $price, $stockid);

létrehozhatja a mysql lekérdezés hivatkozás:

mysql_query($query);

Remélem segít.

Válaszolt 12/06/2011 14:11
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more