質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

3009閲覧

mysqli insert update null入らない

coko1

総合スコア276

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/02/28 03:07

編集2017/04/13 08:52

現在、mysqliを使用してデータの登録、更新の処理を行っているのですが、int型のカラムにnullを登録しようとしても失敗してしまいます。整数での登録、更新は以下のソースで問題なく行えているのですが、どのようにしたらnullを設定できるのでしょうか?

//$params内容 array( null //test_no1 整数の場合問題なく動く ,null //test_no2 ,'test' //test_id )

sql

1update TEST_INFO 2set test_no1 = ? 3 ,test_no2 = ? 4where 5 test_id = ?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/28 03:29

失敗したときのエラーログなど収集していますか?
coko1

2017/02/28 03:35

申し訳ないのですが、とっておりません
KiyoshiMotoki

2017/04/13 08:59

https://teratail.com/help/avoid-asking 「解決後に編集機能を用いて、質問内容を改変し、関係のない内容にしたり、内容を削除する行為は禁止しています。 皆さんにしていただいた質問・回答は、後に他の誰かが困ったときに助けになる情報資産になると考えるからです。」
guest

回答4

0

ベストアンサー

Before

php

1$stmt_params = array($stmt, ''); 2foreach($params as $idx => $value){ 3 if(is_int($value))$stmt_params[1] .= 'i'; 4 else if(is_float($value))$stmt_params[1] .= 'd'; 5 else if(is_string($value))$stmt_params[1] .= 's'; 6 $stmt_params[] = &$params[$idx]; 7}
After

php

1$stmt_params = array($stmt, ''); 2foreach($params as $idx => $value){ 3 if(is_int($value))$stmt_params[1] .= 'i'; 4 else if(is_float($value))$stmt_params[1] .= 'd'; 5 else $stmt_params[1] .= 's'; // NULL をバインドする際に指定する type は、('s'でなくても)何でも良い 6 $stmt_params[] = &$params[$idx]; 7}

質問欄にご提示のコードを実行すると、以下のようなエラーが出力されます。

Warning: mysqli_stmt_bind_param(): Number of elements in type definition string doesn't match number of bind variables in /tmp/67423.php on line 30

開発中はソースファイルの先頭に以下のコードを入れるなどして、
常に、出力されるエラーメッセージに気を配るようにしてください。

php

1ini_set('display_errors', '1'); 2error_reporting(E_ALL);

投稿2017/02/28 04:27

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coko1

2017/02/28 04:49 編集

型をチェックしている箇所でnullをはじいていたんですね... ご丁寧にありがとうございました。
guest

0

nullを許可しておけば、該当する項目値がない状態でinsertするとnullが入ると思います。もしどうしても渡す形式であればそこの渡し方?設定方法ではと。
的外れ回答なら読み飛ばしてください。

投稿2017/02/28 04:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

NOT NULL制約がついているためと思われます
エラーメッセージとDDLを確認、追記してください

投稿2017/02/28 03:30

SVC34

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coko1

2017/02/28 03:34

対象のカラムにはかかっていないです。SQL単体に固定でNULLを記述した場合にはnullで登録されるのですが、「?」を使用したパラメータを渡して処理を行う場合上手くいかないのです。
guest

0

not null制約がかかっているとかではなくてですか?

投稿2017/02/28 03:26

Z-TALBO

総合スコア525

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coko1

2017/02/28 03:33 編集

対象のカラムにはかかっていないです。SQL単体に固定でNULLを記述した場合にはnullで登録されるのですが、「?」を使用したパラメータを渡して処理を行う場合上手くいかないのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問