INSERT INTO mysql issue


INSERT INTO mysql issue

我一直试图将数据插入数据库,但有一个愚蠢的错误,我看不到。用户表和tilaus表之间还应该有一个连接"INNER JOIN"。然而,我不知道在尝试将一些数据插入tilaus表时是否必须始终添加用户id。

表结构:

  CREATE TABLE `tilaus` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `tilaaja` varchar(120) NOT NULL,
 `kuvaus` date NOT NULL,
 `tilauspvm` date DEFAULT NULL,
 `aloituspvm` date DEFAULT NULL,
 `valmistumispvm` date DEFAULT NULL,
 `hyvaksymispvm` date DEFAULT NULL,
 `tehtytyo` date DEFAULT NULL,
 `tunti` int(3) DEFAULT NULL,
 `tarvikkeet` varchar(200) DEFAULT NULL,
 `kustannukset` int(5) DEFAULT NULL,
 `user_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `id` (`id`),
 KEY `user_id` (`user_id`),
 CONSTRAINT `tilaus_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

php代码:

<?php
session_start();
if(!isset($_SESSION['sess_user_id']) || (trim($_SESSION['sess_user_id']) == ''))
    {
        header('Location: login.html');
        exit;
    }
//settings
$username = "root";
$password = "";
$hostname = "localhost"; 
$dbhandle = mysql_connect($hostname, $username, $password) 
  or die("Unable to connect to MySQL"); //checking connection
echo "Connected to MySQL<br>"; // connection established

$tilaaja = $_GET['tilaaja'];
$tyonkuvaus = $_GET['tyonkuvaus'];
$time = now();
$userid = $_SESSION['sess_user_id'];
echo $tilaaja; //JUST A DUMB TEST.. NOTHING TO WORRY ABOUT
echo $tyonkuvaus; // TESTING IF VAIRABLES ARE GETTING THE DATA ALREADEY OR NOT.
$result = mysql_query("INSERT INTO `tilaus`(`tilaaja`, `kuvaus`, `tilauspvm`, `user_id`) 
        VALUES ('$tilaaja','$tyonkuvaus','$time','$userid')");
?>

谢谢。

php没有now((函数,它是mysql的函数

所以使用date("Y-m-d H:i:s")

或将NOW()直接放入查询

像低于

$time = date("Y-m-d H:i:s");

(或(

VALUES ('$tilaaja','$tyonkuvaus',NOW(),'$userid')"

如何使字段tilauspvm仅为类型date,您应该使用:

$time = date("Y-m-d");

您的php代码:

<?php
session_start();
if(!isset($_SESSION['sess_user_id']) || (trim($_SESSION['sess_user_id']) == ''))
    {
        header('Location: login.html');
        exit;
    }
//settings
$username = "root";
$password = "";
$hostname = "localhost"; 
$dbhandle = mysql_connect($hostname, $username, $password) 
  or die("Unable to connect to MySQL"); //checking connection
$tilaaja = $_GET['tilaaja'];
$tyonkuvaus = $_GET['tyonkuvaus'];
$time = date("Y-m-d");
$userid = $_SESSION['sess_user_id'];
$result = mysql_query("INSERT INTO `tilaus`(`tilaaja`, `kuvaus`, `tilauspvm`, `user_id`) 
        VALUES ('$tilaaja','$tyonkuvaus','$time','$userid')");
?>

将错误报告添加到文件的顶部

error_reporting(E_ALL);

ini_set('display_errors', 1);

mysql_*函数从PHP 5.5.0开始就被弃用,不建议用于编写新代码,因为它将来会被删除。相反,应该使用mysqli或PDO_MySQL扩展。

您的表格有:

CONSTRAINT `tilaus_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)

这意味着,在tilaus表中添加记录时,您正在添加user_id字段。该user_id是对users表中的id字段的引用。这意味着,例如,如果user_id = 5,则id = 5应该存在于users表中。

您正在使用mysql,它已被弃用,将来将不可用。

此外,谷歌"MySQL注入">以及如何防止它,因为有人现在可以侵入你的数据库并更改或删除任何东西

试着使用echo mysql_error();来找出到底出了什么问题。

另外,您可以在插入查询中将UserId设置为NULL,只要在该列上设置了主自动递增键,它就会为您创建。

在您的表中,您有默认为null的user_id,因此答案是"是"。您可以添加不带user_id的记录,但您需要在user_id字段中设置null,或者只是避免在查询中提及它。

在您的代码中,如果user_id==null,您将在插入查询中放入一个空字符串(如"(,因此它会将错误作为无效值,因为空字符串与null不同。