2012-08-23 166 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_ *函数 - 如果您使用绑定参数,则可以非常整齐地回避很多这类问题。