私は次のコードを持っています:
function insertrow($tablename,$record){
$columns = $this->gettablecol($tablename);
$types = $this->getbindtypestring($columns);
array_unshift($record, $types);
if(count($columns) && $types){
$query = 'INSERT INTO '.$tablename.' VALUES (?'.str_repeat(',?',count($columns)-1).')';
if($stm = $this->linkid->prepare($query)){
$res = call_user_func_array(array(&$stm,"bind_param"), $params);
$stm->execute();
print_r($stm);
$stm->close();
}
}
}
$record配列は次のようになります。
(
[0] => sssisssssssssssi
[recordid] => TEST1
[recdate] => 2012-10-31 08:45:49
[lastmod] => 2012-10-31 08:45:49
[delflag] => 0
[cusname] => Dilbert
[address1] => 181 Somewhere
[address2] =>
[city] => St. Petersburg
[state] => FL
[zipcode] => 33713
[telephone] => 8135551212
[faxnumber] => 8135551313
[webaddress] =>
[taxid] => 260708780
[pinnumber] => 12345
[isactive] => 0
)
しかし、$ stmは、データがないことを教えてくれます。
mysqli_stmt Object
(
[affected_rows] => 0
[insert_id] => 0
[num_rows] => 0
[param_count] => 16
[field_count] => 0
[errno] => 2031
[error] => No data supplied for parameters in prepared statement
[sqlstate] => HY000
[id] => 1
)
$record配列が何らかの形で不正になっているようです。任意の洞察をいただければ幸いです。
こんにちはビル、ヘッズアップをありがとう。私はあなたのアドバイスを受けて、APIをPDOに切り替えました。しかし、私の問題は解決されていません。insertrowメソッドを次のように変更しました。
function insertrow($tablename,$record){
$this->connect();
$columns = $this->gettablecol($tablename);
if(count($columns)){
$query = 'INSERT INTO '.$tablename.' VALUES (?'.str_repeat(',?',count($columns)-1).')';
try{
$stm = $this->linkid->prepare($query);
$stm->execute($record);
}catch(PDOException $e){
$this->errormsg = $e.getMessage();
$this.errhandler();
exit();
}
}
}
レコードは次のようになります。
Array
(
[recordid] => TEST1
[recdate] => 2012-11-01 09:12:50
[lastmod] => 2012-11-01 09:12:50
[delflag] => 0
[cusname] => Dilbert
[address1] => 181 Somewhere
[address2] =>
[city] => St. Petersburg
[state] => FL
[zipcode] => 33713
[telephone] => 8135551212
[faxnumber] => 8135551313
[webaddress] =>
[taxid] => 260708780
[pinnumber] => 12345
[isactive] => 0
)
$recordの値を新しい配列にコピーしました。
$newrec = array();
foreach($record as $row){
$newrec = $row;
}
それはこのように見えました:
Array
(
[0] => TEST1
[1] => 2012-11-01 09:01:32
[2] => 2012-11-01 09:01:32
[3] => 0
[4] => Dilbert
[5] => 181 Somewhere
[6] =>
[7] => St. Petersburg
[8] => FL
[9] => 33713
[10] => 8135551212
[11] => 8135551313
[12] =>
[13] => 260708780
[14] => 12345
[15] => 0
)
そしてそれを$stm->execute($ newrec)に渡しましたが、機能せず、例外もスローされませんでした。他に何か見ることができますか?
この時点で、$ record配列の受け渡しを削除し、値をハードコーディングしました。
$stm->execute(array('TEST2','2012-10-10 00:00:00','2012-10-10 00:00:00',0,'1','2','3','4','5','6','7','8','9','0','11',0));
準備と実行の両方がtrueに戻っても、まだレコードがテーブルに挿入されていません。
パラメータを特定のデータ型にバインドする必要がありますか?