0

我一直试图让它工作一段时间。我只是难过。这是原始的 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 服务器版本相对应的手册,以在第 28 行的“01:00:00 AND dr_rentmovil_carteras.ID_FORMATO = 1 AND dr_rentmovil_carte”附近使用正确的语法

任何帮助将不胜感激。

4

3 回答 3

3

您需要将日期时间字符串用引号括起来:

='$F_HASTACORTE'

否则,它将评估2012-03-31 01:00:00为数字,而不是日期时间。

于 2012-08-23T18:37:30.337 回答
1

你可能想在你的'$VARIABLES'. 如果你不这样做,就逃脱他们。

于 2012-08-23T18:37:16.953 回答
0

尝试:

AND dr_rentmovil_carteras.F_HASTACORTE                          =      '$F_HASTACORTE'

如果你的变量不是整数,你应该引用它们——在其他一些地方你也应该这样做。

您还应该考虑使用 PDO 而不是 mysql_* 函数 - 如果您使用绑定参数,您可以非常巧妙地回避很多此类问题。

于 2012-08-23T18:37:20.493 回答