Please provide a code example, and its execution path, so we can help you out on this.
PHP 5.3.5 MySQL Server version 5.5.8
Code:
<?php
Class lessons_template_db {
Protected $db = null;
Public Function __Construct() { // assure connection
$currentHost = pathinfo($_SERVER['REMOTE_ADDR'],PATHINFO_BASENAME);
if($currentHost == "127.0.0.1"){ // no place like home
$theUsername = "root";
$thePassword = "";
} else {
--> detail omitted <--
} // end if-else
try {
$this->db = new PDO('mysql:host=localhost;dbname=lessons;charset=UTF-8', $theUsername, $thePassword);
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $ex) {
echo("<p style='font-weight: bold; color: red; font-size: larger;'><br /><br /><br />A serious error occurred, contact programmer who will need the following detail<br /></p>");
echo("<br />lessons_template_db->Construct<br />");
var_dump($ex);
exit();
} // end try-catch
} // end function
} // end class
CRUD class for table: studentlist
I find the Update and Add code cumbersome.
Code:
<?php
Class lessons_student_db
extends lessons_template_db {
Public Function GetStudentList() {
// dispensing with try-catch
$stmt = $this->db->prepare("SELECT name FROM studentlist ORDER BY name");
$stmt->execute();
$nameList = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$nameList[] = $row['name'];
} // end while
return($nameList);
} // end function
Public Function GetStudentDayList($choice) {
// dispensing with try-catch
$stmt = $this->db->prepare("SELECT name FROM studentlist WHERE lessonday = :lessonday ORDER BY name");
$stmt->bindValue(':lessonday', $choice, PDO::PARAM_STR);
$stmt->execute();
$nameList = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$nameList[] = $row['name'];
} // end while
return($nameList);
} // end function
Public Function GetStudentDetail($name) {
$namelist = array();
$stmt = $this->db->prepare("SELECT * FROM studentlist WHERE name = :name");
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
// dispensing with try-catch
$stmt->execute();
$nameList = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$nameList[] = $row;
} // end while
return($nameList);
}
Public Function UpdateDetail($detailVals){
$stmtArray = array();
$args = "";
if(isset($detailVals['newname']) && strlen($detailVals['newname']) > 0) {
$name = mysql_real_escape_string($detailVals['newname']);
$args .= "name=:name";
$stmtArray[':name'] = $name;
}
if(isset($detailVals['lessonday']) && strlen($detailVals['lessonday']) > 0) {
$lessonday = mysql_real_escape_string($detailVals['lessonday']);
if(strlen($args)>0) {
$args .= ", "; // add separator if args started
}
$args .= "lessonday=:lessonday";
$stmtArray[':lessonday'] = $lessonday;
}
if(isset($detailVals['independent']) && strlen($detailVals['independent']) > 0) {
$independent = mysql_real_escape_string($detailVals['independent']);
if(strlen($args)>0) {
$args .= ", "; // add separator if args started
}
$args .= "independent=:independent";
$stmtArray[':independent'] = $independent;
}
if(isset($detailVals['leader']) && strlen($detailVals['leader']) > 0) {
$leader = mysql_real_escape_string($detailVals['leader']);
if(strlen($args)>0) {
$args .= ", "; // add separator if args started
}
$args .= "leader=:leader";
$stmtArray[':leader'] = $leader;
}
if(isset($detailVals['sidewalker']) && is_numeric($detailVals['sidewalker']) > 0) {
$sidewalker = $detailVals['sidewalker'];
if(strlen($args)>0) {
$args .= ", "; // add separator if args started
}
$args .= "sidewalker=:sidewalker";
$stmtArray[':sidewalker'] = $sidewalker;
}
if(isset($detailVals['note']) && strlen($detailVals['note']) > 0) {
$note = $detailVals['note'];
if(strlen($args)>0) {
$args .= ", "; // add separator if args started
}
$args .= "note=:note";
$stmtArray[':note'] = $note;
}
$sql = "UPDATE studentlist SET " . $args . " WHERE idStudent = " . $detailVals['idStudent'];
try {
$stmt = $this->db->prepare($sql);
$stmt->execute($stmtArray);
} catch(PDOException $ex) {
$msg = $this->DbReject($sql, $detailVals, $ex);
return $msg;
} // end try-catch
return("success");
} // end function UpdateDetail
Public Function AddDetail($detailVals){
$sql = "INSERT INTO studentlist(name,lessonday,independent,leader,sidewalker,note) ";
$sql.= "VALUES(:name,:lessonday,:independent,leader:,:sidewalker,:note)";
$stmt = $this->db->prepare($sql);
$stmtArray = array();
$stmtArray[':newname'] = mysql_real_escape_string($detailVals['newname']);
$stmtArray[':lessonday'] = mysql_real_escape_string($detailVals['lessonday']);
$stmtArray[':independent'] = mysql_real_escape_string($detailVals['independent']);
$stmtArray[':leader'] = mysql_real_escape_string($detailVals['leader']);
$stmtArray[':sidewalker'] = $detailVals['sidewalker'];
$stmtArray[':note'] = mysql_real_escape_string($detailVals['note']);
try {
$stmt->execute($stmtArray);
$detailVals['idStudent'] = $this->db->lastInsertid();
} catch(PDOException $ex) {
$msg = $this->DbReject($sql, $detailVals, $ex);
return $msg;
} // end try-catch
return("success");
} // end function UpdateDetail
Public Function DbReject($sql, $detailVals, $ex) {
if ($ex->getCode() == '23000') {
return ("name already on file, please try again");
return false;
}
echo("<p style='font-weight: bold; color: red; font-size: larger;'><br /><br /><br />A serious error occurred, contact programmer who will need the following detail<br /></p>");
echo("<br />lessons_student_db<br />sql: {$sql}");
echo("<br />detailVals array<br />");
var_dump($detailVals);
echo("<br />ex message<br />");
var_dump($ex);
exit();
} // end function DbReject
} // end class
?>
Excerpts from the retireval call to lessons_student_db
Code:
Class lessons_student_Form
...
Function BuildContent(){
...
$studentObj = new lessons_student_db();
$studentValues = $studentObj->GetStudentList();
Excerpts from the Add/Update call to lessons_student_db (Validtion function omitted)
Code:
<?php
Class lessons_student_detail_ParseForm
...
Function Apply(){
$studentObj = new lessons_student_db();
if (isset($this->detailVals['idStudent']) && is_numeric($this->detailVals['idStudent'])) {
$action = "updated";
$msg = $studentObj->UpdateDetail($this->detailVals);
} else {
$action = "added";
$msg = $studentObj->AddDetail($this->detailVals);
} // end if-else
if($msg != "success") {
$this->msgs[] = $msg;
$this->OnError(); // will not return
} // end if
$msgs = array();
$msgs[] = "student {$action}. Please select next student.";
$_SESSION['msgs'] = $msgs;
unset($this->detailVals);
$selectObj = new lessons_student_Form();
exit;
} // end function Apply
...
} // end class
Bookmarks