2012-08-23 67 views
0

我一直試圖讓它工作一段時間。我只是難住。這裏是原始的MYSQL,然後PHP Ive一直在努力。將MYSQL查詢轉換爲PHP查詢

MYSQL:

SET @COD_PAIS = 3; 
SET @F_HASTACORTE = '2012-03-31 01:00:00'; 

SELECT mcarteras.DES_CARTERA_CC     AS 'Short Name of Fund' 
    , mcarterasflias.DES_CARTERAFLIA   AS 'I/C' 
    , msociedades.DES_SOCIEDAD_CORTO   AS 'Fund Manager Company' 
    , mcarteras_clases.DES_CARTERACLASE  AS 'Class' 
    , mcarteras_clasesesp.DES_CARTERACLASE_ESP AS 'Special Class' 
    , dr_rentmovil_carteras.POR_RENTCARTERA AS 'TTR year-to-date %' 
    , dficha_mes.POR_REMUNERA_COBRADA   AS 'Mgmt Fee Effectively Charged' 
    , dficha_mes.POR_GASTOS_TOTALESC   AS 'Total Expenses %' 
    , dficha_mes.VR_CARTERA_FCORTE    AS 'Fund Size' 
    , dr_rentmovil_carteras.F_HASTACORTE    AS 'Date' 
    FROM mcarteras 
INNER 
    JOIN mcarterasflias 
    ON mcarterasflias.ID_CARTERAFLIA   = mcarteras.ID_CARTERAFLIA 
INNER 
    JOIN msociedades 
    ON msociedades.ID_SOCIEDAD     = mcarteras.ID_SOCIEDADADM 
INNER 
    JOIN mcarteras_clases 
    ON mcarteras_clases.ID_CARTERACLASE  = mcarteras.ID_CARTERACLASE 
INNER 
    JOIN mcarteras_clasesesp 
    ON mcarteras_clasesesp.ID_CARTERACLASE_ESP = mcarteras.ID_CARTERACLASE_ESP 
INNER 
    JOIN dr_rentmovil_carteras 
    ON dr_rentmovil_carteras.ID_CARTERA  = mcarteras.ID_CARTERA 
    AND dr_rentmovil_carteras.COD_PAIS          = @COD_PAIS 
    AND dr_rentmovil_carteras.F_HASTACORTE        [email protected]_HASTACORTE 
    AND dr_rentmovil_carteras.ID_FORMATO = 1 
    AND dr_rentmovil_carteras. ID_COLUMNA = 5 
INNER 
    JOIN dficha_mes 
    ON dficha_mes.ID_CARTERA     = mcarteras.ID_CARTERA 
    AND dficha_mes.COD_PAIS             = @COD_PAIS 
    AND dficha_mes.F_CORTE            = @F_HASTACORTE 

WHERE mcarteras.COD_PAIS             = @COD_PAIS 
    AND mcarteras.ID_CARTERATIPO = 4 
    AND mcarteras.ID_CARTERAFLIA IN (3,4) 
    AND mcarteras.IND_PUBLICACION = 1 
    AND mcarteras.COD_ESTADO= 1 

PHP: 
<?php 
$con = mysql_connect("localhost","root",""); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("bdcarterascv2", $con); 
$COD_PAIS = '3'; 
$F_HASTACORTE = '2012-03-31 01:00:00'; 

$result = mysql_query("SELECT DES_CARTERA_CC    AS 'Short Name of Fund' 
    , mcarterasflias.DES_CARTERAFLIA   AS 'I/C' 
    , msociedades.DES_SOCIEDAD_CORTO   AS 'Fund Manager Company' 
    , mcarteras_clases.DES_CARTERACLASE  AS 'Class' 
    , mcarteras_clasesesp.DES_CARTERACLASE_ESP AS 'Special Class' 
    , dr_rentmovil_carteras.POR_RENTCARTERA AS 'TTR year-to-date %' 
    , dficha_mes.POR_REMUNERA_COBRADA   AS 'Mgmt Fee Effectively Charged' 
    , dficha_mes.POR_GASTOS_TOTALESC   AS 'Total Expenses %' 
    , dficha_mes.VR_CARTERA_FCORTE    AS 'Fund Size' 
    ,dr_rentmovil_carteras.F_HASTACORTE  AS'Date' 
    FROM mcarteras 
INNER 
    JOIN mcarterasflias 
    ON mcarterasflias.ID_CARTERAFLIA   = mcarteras.ID_CARTERAFLIA 
INNER 
    JOIN msociedades 
    ON msociedades.ID_SOCIEDAD     = mcarteras.ID_SOCIEDADADM 
INNER 
    JOIN mcarteras_clases 
    ON mcarteras_clases.ID_CARTERACLASE  = mcarteras.ID_CARTERACLASE 
INNER 
    JOIN mcarteras_clasesesp 
    ON mcarteras_clasesesp.ID_CARTERACLASE_ESP = mcarteras.ID_CARTERACLASE_ESP 
INNER 
    JOIN dr_rentmovil_carteras 
    ON dr_rentmovil_carteras.ID_CARTERA  = mcarteras.ID_CARTERA 
    AND dr_rentmovil_carteras.COD_PAIS          = $COD_PAIS 
    AND dr_rentmovil_carteras.F_HASTACORTE       =  $F_HASTACORTE 
    AND dr_rentmovil_carteras.ID_FORMATO = 1 
    AND dr_rentmovil_carteras. ID_COLUMNA = 5 
INNER 
    JOIN dficha_mes 
    ON dficha_mes.ID_CARTERA     = mcarteras.ID_CARTERA 
    AND dficha_mes.COD_PAIS           =  $COD_PAIS 
    AND dficha_mes.F_CORTE            = $F_HASTACORTE 

WHERE mcarteras.COD_PAIS            = $COD_PAIS 
    AND mcarteras.ID_CARTERATIPO = 4 
    AND mcarteras.ID_CARTERAFLIA IN (3,4) 
    AND mcarteras.IND_PUBLICACION = 1 
    AND mcarteras.COD_ESTADO= 1 
") 
or die(mysql_error()); 

// HTML ... Aliases from Mysql 
echo "<table border='1'> 
<tr> 
<th>Short Name of Fund</th> 
<th>I/C</th> 
<th>Fund Manager Company</th> 
<th>Class</th> 
<th>Special Class</th> 
<th>TTR year-to-date %</th> 
<th>Mgmt Fee Effectively Charged</th> 
<th>Total Expenses %</th> 
<th>Fund Size</th> 
<th>Date</th> 
</tr>"; 

//<tr> specifies table row. for each <td> (table data) will specify a new column. The  $row specifies the mysql column name (in this case using an alias) 
while($row = mysql_fetch_array($result)) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['Short Name of Fund'] . "</td>"; 
echo "<td>" . $row['I/C'] . "</td>"; 
    echo "<td>" . $row['Fund Manager Company'] . "</td>"; 
    echo "<td>" . $row['Class'] . "</td>"; 
    echo "<td>" . $row['Special Class'] . "</td>"; 
    echo "<td>" . $row['TTR year-to-date %'] . "</td>"; 
    echo "<td>" . $row['Mgmt Fee Effectively Charged'] . "</td>"; 
    echo "<td>" . $row['Total Expenses %'] . "</td>"; 
    echo "<td>" . $row['Fund Size'] . "</td>"; 
    echo "<td>" . $row['Date'] . "</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 

mysql_close($con); 
?> 

這是當前的錯誤: 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本近01年的使用權語法手冊:00:00和dr_rentmovil_carteras.ID_FORMATO = 1 AND dr_rentmovil_carte」在第28行

任何幫助將不勝感激。

+0

你不應該使用'mysql_ *'函數 - 它們是折舊的。使用'mysqli'或'PDO'。 –

回答

3

你需要用的時間字符串引號:

='$F_HASTACORTE' 

否則,它正在評估2012-03-31 01:00:00爲數字,而不是日期時間。

1

您可能想要在您的'$VARIABLES'附近加上引號。如果你沒有,就逃避它們。

0

嘗試:

AND dr_rentmovil_carteras.F_HASTACORTE       =  '$F_HASTACORTE' 

如果變量不是整數,你應該說出來了 - 有一些其他地方,你應該這樣做了。

您還應該看看使用PDO而不是mysql_ *函數 - 如果您使用綁定參數,則可以非常整齊地迴避很多這類問題。