私は周りを見回して、同じ問題を抱えている人が何人かいることに気づきましたが、彼らの見落としはここでは当てはまらないようです。
値の配列をテーブルに追加するPHP関数があります。テーブルフィールドにNULL
aを配置するために、最初に値が空であるかどうかをチェックし、空である場合はそれらを。に置き換えます。null
私が配置している各フィールドは、代わりにそこに配置null
することを可能にします。null
0
ここにいくつかのコードがあります:
public static function AddGame($array, $tId)
{
global $db; // Bring DB into scope
// Get IDs from particular names
$locId = $array['fLocation'];
// Ensure empty values are SQL null
$hTeamId = "'{$array['fHomeTeam']}'";
$vTeamId = "'{$array['fVisitTeam']}'";
$hScore = "'{$array['fHomeScore']}'";
$vScore = "'{$array['fVisitScore']}'";
$hHoldFor = "'{$array['fHomeHoldFor']}'";
$vHoldFor = "'{$array['fVisitHoldFor']}'";
// Prepare row for insertion
$row = "'','$tId','$locId',$hTeamId,$vTeamId,'{$array['fDate']}','{$array['fTime']}',$hScore,$vScore,'{$array['fGameType']}',$hHoldFor,$vHoldFor";
$stmt = $db->prepare("INSERT INTO `game` VALUES($row)");
if($stmt->execute()) return true;
else return false;
}
この関数をさまざまな行でデバッグし、$ row文字列をダンプしました。これは、次のように表示されます。
''、 '1'、 '1'、 '21'、 '21'、 '10/10/12'、 '10:30 AM'、'NULL'、'NULL'、'pool'、'NULL'、 'ヌル'
しかし、テーブルのテキストタイプを確認すると、フィールドの値は文字通りNULL
私が望むものではなく、intフィールドもとして表示され0
ます。値を空白のままにするか、PHPのnullのままにすると、テキストフィールドは空(または必要に応じて適切null
に)として表示されますが、intは引き続きとして表示され0
ます。
これは、値を間接的に挿入する方法が原因であると思います。
これがSHOWCREATETABLEですgame
CREATE TABLE `game`( `id` int(11)NOT NULL AUTO_INCREMENT、 `tId` int(11)NOT NULL、 `Lid` int(11)NOT NULL、 `hTeamId` int(11)DEFAULT NULL、 `vTeamId` int(11)DEFAULT NULL、 `date` text NOT NULL、 `time`テキストNOTNULL、 `hScore` int(11)DEFAULT NULL、 `vScore` int(11)DEFAULT NULL、 `type` text NOT NULL、 `hHoldFor`テキスト、 `vHoldFor`テキスト、 主キー( `id`) )ENGINE = InnoDB AUTO_INCREMENT = 17 DEFAULT CHARSET = latin1
アップデート:
INSERT INTO `game` VALUES(''、 '1'、 '1'、''、''、 '10/09/12'、 '9:30 AM'、''、''、'pool'、'winnerプールAの'、'プールBの勝者')