我一直试图让这个工作一段时间。我只是难过。这是原始的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 =@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
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和dr_rentmovil_carte'第28行附近使用正确的语法
非常感谢任何帮助。
答案 0 :(得分:3)
您需要将日期时间字符串包装在引号中:
='$F_HASTACORTE'
否则,它会将2012-03-31 01:00:00
评估为数字,而不是日期时间。
答案 1 :(得分:1)
您可能想在'$VARIABLES'
周围加上引号。如果你不这样做,就逃避它们。
答案 2 :(得分:0)
尝试:
AND dr_rentmovil_carteras.F_HASTACORTE = '$F_HASTACORTE'
如果你的变量不是整数,你应该引用它们 - 还有其他几个你应该这样做的地方。
你也应该看看使用PDO而不是mysql_ *函数 - 如果使用绑定参数,你可以非常巧妙地回避这类问题。