2016-08-10 4 views
0

"last Tuesday"と "Today"の間にある特定の列の値を合計します。私はこのコードを書いた:sum()を使用するのが難しいです。

<?php 
define('DB_HOST', '****'); 
define('DB_USER', '****'); 
define('DB_PASSWORD', '****'); 
define('DB_DATABASE', '****'); 

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 
if(!$link) { 
    die('Failed to connect to server: ' . mysql_error()); 
} 

//Select database 
$db = mysql_select_db(DB_DATABASE); 
if(!$db) { 
    die("Unable to select database"); 
} 

    //Function to sanitize values received from the form. Prevents SQL injection 
function clean($str) { 
    $str = @trim($str); 
    if(get_magic_quotes_gpc()) { 
     $str = stripslashes($str); 
    } 
    return mysql_real_escape_string($str); 
} 

    //Sanitize the POST values 
$dk=strtotime("today"); 
$d=strtotime("previous Tuesday"); 


$res=mysql_query("SELECT sum(mball202) FROM manager WHERE dateid >= date('Y-m-d', $d) AND dateid <= date('Y-m-d', $dk)"); 
while($row=mysql_fetch_array($res)) 
{ 
?> 

        <tr> 
         <td align="center"><?php echo $row['sum(mball202)']; ?></td> 
        </tr> 
        <?php 
} 
?> 

をしかし、私は、ファイルを実行した場合、それは(警告を返します:は、mysql_fetch_array()パラメータ1は、リソース、/srv/disk11/1165502/www/tst.scienceonthewebで、指定したbooleanことを期待しています。 net/admin/manager/result-weekly.php on line 44 )

私は間違っていますか?誰か助けてください。

+2

、それらは[**正式に廃止されました** ](https://wiki.php.net/rfc/mysql_deprecation)、**はもはや維持されておらず、** [**削除**]されます(http://php.net/manual/en/function.mysql -connect.php#warning)を使用します。将来的にプロジェクトの機能を確実にするには、コードを[PDO](http://php.net/pdo)または[MySQLi](http://php.net/mysqli)で更新する必要があります。 – Neal

+0

@Neal、私は初心者です、どうすればいいですか? –

答えて

1

mysql_errorは、クエリにエラーがあるため、falseを返します。あなたのクエリがあり、そうでなければ

$dateStart = date('Y-m-d', $d); 
$dateEnd = date('Y-m-d', $dk); 

$res=mysql_query('SELECT sum(mball202) FROM manager WHERE dateid >= "' . $dateStart . '" AND dateid <= "' . $dateEnd . '"'); 

:あなたはそれを修正する必要があり `mysql_ *`機能のためのより多くのサポート**は**ありません

SELECT sum(mball202) FROM manager WHERE dateid >= date('Y-m-d', 1470693600) AND dateid <= date('Y-m-d', 1470780000) 
+0

あなたの答えは正しいです。ありがとうございます。 –

+0

@Noreply直接入力としてパラメータを使用する場合は、[prepared statements](http://www.w3schools.com/php/php_mysql_prepared_statements.asp)を必ず使用してください。 '$ d'と' $ dk'は日付に変換されるが、他の場合は[SQL Injections](http://www.w3schools.com/sql/sql_injection.asp)のリスクがあるため、上記の解決策は安全です。 –

+0

@ K.Tippenhauer、Okay。私はそれに注意した。ありがとう。 –

関連する問題