Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询插入";0“;对于所有列值_Php_Html_Mysql - Fatal编程技术网

Php MySQL查询插入";0“;对于所有列值

Php MySQL查询插入";0“;对于所有列值,php,html,mysql,Php,Html,Mysql,我有一个带有5个文本框的HTML表单。单击submit按钮后,表单将提交到名为“admin.php”的页面 admin.php <?php include($_SERVER['DOCUMENT_ROOT'] . '/inc/init.php'); $reference_key = $_POST['reference_key']; $success = false; switch ($reference_key) { case 0: break; case 2: {

我有一个带有5个文本框的HTML表单。单击submit按钮后,表单将提交到名为“admin.php”的页面

admin.php

<?php
include($_SERVER['DOCUMENT_ROOT'] . '/inc/init.php');
$reference_key = $_POST['reference_key'];
$success = false;
switch ($reference_key)
{
    case 0: break;
    case 2: {
        $date = $_POST['date'];
        $time = $_POST['time'];
        $gym = $_POST['gym'];
        $home = $_POST['home'];
        $away = $_POST['away'];
        $success = "";
        try {
            newGame($db7, $date, $time, $gym, $home, $away);
            $success="index.php";
        }
        catch (Exception $e)
        {
            $success="/404";
        }
        //header("Location: " . $success);
    } break;
    default: break;
}

function newGame($db, $date, $time, $gym, $home, $away)
{
    $db->addGameToSchedule($date, $time, $gym, $home, $away);
}
?>
函数顶部的
print
语句用于检查值是否正确传递。执行代码时,print语句会正确打印我输入的信息。但是,当我检查数据库中的新行值时,对于插入的5列,我只看到“0”


我做错了什么?如果需要添加更多信息,请告诉我。

不要将参数占位符放在引号内。在引号内,任何不包含数字的文字字符串都将转换为0。就像
SELECT 1+'abc'
返回1+0或1一样

改为这样做:

$sth = $this -> db -> prepare("INSERT INTO schedule (date, time, gym, home, away)
    VALUES (:date, :time, :gym, :home, :away)");

@redolent的重新评论:

试试这个:

mysql> SELECT ':date' AS value;
+-------+
| value |
+-------+
| :date |
+-------+
带引号的字符串是文字,而不是参数占位符。在该示例中,它只是一个字符串文本

如果我们强制将其解释为数字:

mysql> SELECT 0 + ':date' AS value;
+-------+
| value |
+-------+
|     0 |
+-------+
1 row in set, 1 warning (0.04 sec)

Warning (Code 1292): Truncated incorrect DOUBLE value: ':date'
如果我们强制将其解释为日期:

mysql> SELECT DATE(':date') AS value;
+-------+
| value |
+-------+
| NULL  |
+-------+
1 row in set, 1 warning (0.35 sec)

Warning (Code 1292): Incorrect datetime value: ':date'

成功了!感谢您解释为何将其转换为0:)我很感激!你是说用引号,
':date'
转换成
'0'
?或者将其转换为文本
':date'
,而不是例如
'2014-01-01'
?@redolent,请参见上述示例。
mysql> SELECT DATE(':date') AS value;
+-------+
| value |
+-------+
| NULL  |
+-------+
1 row in set, 1 warning (0.35 sec)

Warning (Code 1292): Incorrect datetime value: ':date'