i typed class it's extended pdo class , using on project. in insert method error.
on follow codes insert table:
public function insert($table, $data) { ksort($data); $field_names = implode(', ',array_keys($data)); $field_values = ':'.implode(', :',array_keys($data)); $sth = $this->prepare("$table ($field_names) values($field_values)"); foreach ($data $key => $value) { $sth->bindvalue(":$key",$value); } $this->_numrows = $sth->rowcount(); if($this->_numrows > 0) return 1; else return 0; } and using on project this:
return $this->db->insert("insert kategoriler(tr_adi,en_adi,sira,isheader,parentid,url) values(:tr_adi,:en_adi,:sira,:isheader,:parentid,:url)", array( "tr_adi" => $tr_adi, "en_adi" => $en_adi, "sira" => $sira, "isheader" => 0, "parentid" => $parentid, "url" => $url )); but doesn't work. put print_r function $sth->errorinfo() , error:
array ( [0] => 42000 [1] => 1064 [2] => have error in sql syntax; check manual corresponds mysql server version right syntax use near '(en_adi, isheader, parentid, sira, tr_adi, url) values('blue sky bar lounge', '' @ line 1 )
first of all, function should take table name first parameter instead of partial query.
secondly, should make effort escape column names reserved words in mysql; can wrapping them in backticks.
lastly, don't need use ->bindvalue() in loop; use question marks placeholders , pass array_values($data) in execution statement.
public function insert($table, $data) { // try our best not use reserved words $columns = array_map(function($column) { return "`$column`"; }, array_keys($data)); // use question marks place holders $values = array_fill(0, count($data), '?'); // construct query $sql = sprintf('insert `%s` (%s) values (%s)', $table, join(',', $columns), join(',', $values) ); // prepare , execute $stmt = $this->prepare($sql); $stmt->execute(array_values($data)); $this->_numrows = $stmt->rowcount(); return $this->numrows ? 1 : 0; } to use it:
$db->insert('kategoriler', array( "tr_adi" => $tr_adi, "en_adi" => $en_adi, "sira" => $sira, "isheader" => 0, "parentid" => $parentid, "url" => $url ));
Comments
Post a Comment