-1

古いmysqlで関数を作成し、それをPDOに転送したいのですが、機能しません。これが私の新しいコードです:

global $host, $dbname, $user, $pass;
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
    $STH = $DBH->query("SELECT SUM(score), SUM(score_from) FROM school_test_report, school_students 
    WHERE (school_test_report.student_id = school_students.student_id 
    and school_test_report.class=school_students.class) 
    and school_test_report.student_id = '$student_id' and  school_test_report.subject = '$subject'
    and school_test_report.test_date >= '$thisarch'
                                ")
    $STH->setFetchMode(PDO::FETCH_ASSOC);
    return $STH;

そしてそれは出力します:

$student_id = test_score_month($name, 'English');
echo $student_id['score'].'/'.$student_id['score_from'];

動作している古いコードは次のとおりです。

$result1 = mysql_query("SELECT SUM(score), SUM(score_from) FROM school_test_report, school_students 
    WHERE (school_test_report.student_id = school_students.student_id 
    and school_test_report.class=school_students.class) 
    and school_test_report.student_id = '$student_id' and  school_test_report.subject = '$subject'
    and school_test_report.test_date >= '$thisarch'
                                ")
    or die(mysql_error());  
    $row = mysql_fetch_assoc($result1);
 return $row;

そしてそれは出力します:

$student_id = test_score_month($name, 'English');
echo $student_id['score'].'/'.$student_id['score_from'];
4

1 に答える 1

1

これが例です。モデルクラスのユーザーに関連するクエリですべての関数をラップし、各メソッドを呼び出して結果を返します。関数/メソッドがプレースホルダーをどのように使用するかを確認し、:student_idbindParamの値をプレースホルダーにバインドします。単なる例ですが、もう少し理解するのに役立ちます。

<?php 
class user_model{

    private $db;

    function __construct($host,$dbname,$user,$pass){
        $this->dbhost = $host;
        $this->dbname = $dbname;
        $this->dbuser = $user;
        $this->dbpass = $pass;
    }

    private function connect(){
        if (!$this->db instanceof PDO){
            $this->db = new PDO('mysql:dbname='.$this->dbname.';host='.$this->dbhost, $this->dbuser, $this->dbpass);
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
    }

    function user_test_score($student_id,$subject,$thisarch){
        $this->connect();
        $sql = "SELECT SUM(score) as score, SUM(score_from) FROM school_test_report, school_students
                WHERE (school_test_report.student_id = school_students.student_id 
                AND school_test_report.class=school_students.class) 
                AND school_test_report.student_id = :student_id and  school_test_report.subject = :subject
                AND school_test_report.test_date >= :thisarch";
        $statement = $this->db->prepare($sql);
        $statement->bindParam(':student_id', $student_id, PDO::PARAM_INT);
        $statement->bindParam(':subject', $subject, PDO::PARAM_STR);
        $statement->bindParam(':thisarch', $thisarch, PDO::PARAM_STR);
        $statement->execute();
        return $statement->fetchAll(PDO::FETCH_ASSOC);
    }

}


$usermodel = new user_model('localhost','YOURDB','username','password');

$student_id = $usermodel->user_test_score($name,'English',your_test_date_format);

print_r($student_id);
?>
于 2012-05-27T15:32:53.933 に答える