首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询为所有列值插入"0“

问MySQL查询为所有列值插入"0“
EN

Stack Overflow用户
提问于 2013-12-03 01:20:16
回答 1查看 237关注 0票数 0

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

admin.php

代码语言:javascript
复制
<?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);
}
?>

当表单提交时,将传递一个引用键。引用键的值为" 2“,正如您在上面为admin.php的代码中所看到的那样,当键为2时执行一组特定的代码。正如代码中所指出的,函数newGame被执行,这反过来调用函数addGameToSchedule。

addGameToSchedule函数:

代码语言:javascript
复制
public function addGameToSchedule($date, $time, $gym, $home, $away) {
    try {
        print "Date: " . $date . "\nTime: " . $time . "\nGym: " . $gym . "\nHome: " . $home . "\nAway: " . $away;
        $sth = $this -> db -> prepare("INSERT INTO schedule (date, time, gym, home, away) VALUES (':date', ':time', ':gym', ':home', ':away')");
        $sth -> execute(array(':date' => $date, ':time' => $time, ':gym' => $gym, ':home' => $home, ':away' => $away));
    } catch (Exception $e) {
        header('Location: /404');
    }
}

函数顶部的print语句检查值是否被正确传递。执行代码时,print语句将正确打印我输入的信息。但是,当我检查新值行的数据库时,我只看到要插入的5列的"0“。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 01:22:47

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

取而代之的是这样做:

代码语言:javascript
复制
$sth = $this -> db -> prepare("INSERT INTO schedule (date, time, gym, home, away)
    VALUES (:date, :time, :gym, :home, :away)");

关于@redolent的评论:

试试这个:

代码语言:javascript
复制
mysql> SELECT ':date' AS value;
+-------+
| value |
+-------+
| :date |
+-------+

引用的字符串是文字,而不是参数占位符。在这个例子中,它只是一个字符串文本。

如果我们强迫它被解释为一个数字:

代码语言:javascript
复制
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'

如果我们强迫它被解释为一个日期:

代码语言:javascript
复制
mysql> SELECT DATE(':date') AS value;
+-------+
| value |
+-------+
| NULL  |
+-------+
1 row in set, 1 warning (0.35 sec)

Warning (Code 1292): Incorrect datetime value: ':date'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20341071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档