Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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数据库中插入空格_Php_Mysql - Fatal编程技术网

PHP在MySQL数据库中插入空格

PHP在MySQL数据库中插入空格,php,mysql,Php,Mysql,我有一个HTML表单,它将值提交到以下PHP文件,并将其插入MySQL数据库: <?php $con = mysql_connect("*","*","*"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("*", $con); $sql="INSERT INTO scores (hometeam, awayteam, result) V

我有一个HTML表单,它将值提交到以下PHP文件,并将其插入MySQL数据库:

<?php
  $con = mysql_connect("*","*","*");
  if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }

  mysql_select_db("*", $con);

  $sql="INSERT INTO scores (hometeam, awayteam, result)
  VALUES
  ('" . mysql_real_escape_string($_POST['hometeam']) . "',
   '" . mysql_real_escape_string($_POST['awayteam']) . "',
   '" . mysql_real_escape_string($_POST['result']) . "')";

  if (!mysql_query($sql,$con))
    {
    die('Error: ' . mysql_error());
    }
  echo "1 record added";

  mysql_close($con);
?>

不要在查询中引用它们。相反,首先构建变量,并将引号附加到查询外部的转义字符串值,这样您就可以在字符串为空时插入
NULL
关键字:

// If any is not set or empty in the POST, assign the string "NULL" unquoted to a variable
// which will be passed to MySQL as the unquoted NULL keyword.
// Otherwise escape the value from $_POST and surround the escaped value in single quotes
$ateam = !empty($_POST['awayteam']) ? "'" . mysql_real_escape_string($_POST['awayteam']) . "'" : "NULL";
$hteam = !empty($_POST['hometeam']) ? "'" . mysql_real_escape_string($_POST['hometeam']) . "'" : "NULL";
$result = !empty($_POST['result']) ? "'" . mysql_real_escape_string($_POST['result']) . "'" : "NULL";

// Then pass the three variables (already quoted if necessary) directly to the query.
$sql="INSERT INTO scores (hometeam, awayteam, result) VALUES ($hteam, $ateam, $result);
从长远来看,建议开始使用支持预处理语句的MySQL API,如PDO或MySQLi。它们提供了更好的安全性,可以更优雅地处理输入空值,旧的
mysql_*()
函数很快就会被弃用。

在您的代码中,替换:

$sql="INSERT INTO scores (hometeam, awayteam, result)
  VALUES
  ('" . mysql_real_escape_string($_POST['hometeam']) . "',
   '" . mysql_real_escape_string($_POST['awayteam']) . "',
   '" . mysql_real_escape_string($_POST['result']) . "')";
与:


或者,如果您有权访问db,请更改列(可选),并在默认情况下将它们设置为NULL。
i、 e.如果没有在该列中插入任何内容,默认情况下将显示NULL。

为什么不将“”和其他无效形式的数据替换为“NULL”

检查$\u POST['data']是否等于“”或“”,如果为true,则将其设置为“null”

而且, 使用PHP函数“addslashes”代替mysql\u real\u escape\u字符串。

您可以从mysql数据库中使用该函数。它所做的是,它接受2个参数,如果它们相同,则返回null。因此,基本上您可以将代码更改为如下所示:

  $sql="INSERT INTO scores (hometeam, awayteam, result)
  VALUES
  (NULLIF('" . mysql_real_escape_string($_POST['hometeam']) . "', ''),
   NULLIF('" . mysql_real_escape_string($_POST['awayteam']) . "', ''),
   NULLIF('" . mysql_real_escape_string($_POST['result']) . "', ''))";
它基本上会检查输入的值是否为“”(空字符串),如果是这种情况,它会在数据库中保存NULL。在传递到NULLIF之前,您甚至可以从变量中修剪前导或尾随空格,因此,如果有人只在输入框中输入空格,它仍然会保存NULL


此外,正如Michael所说,如果您继续使用PDO或mysqli扩展,将会更安全、更好。希望我的回答能有所帮助。

我想你是想检查输入是否有效?当前代码总是在列中插入一个值(有时是空字符串),而不是添加两个引号来添加不带引号的NULL这个词,因此你的想法行不通。不能用于转义mysql查询中使用的字符串!世界的存在是有原因的!不,mysql_real_escape_string的使用是不鼓励的,从PHP文档来看:为了转义数据库参数,出于安全原因,应该使用DBMS特定的转义函数(例如mysql的mysqli_real_escape_string()或PostgreSQL的pg_escape_literal(),pg_escape_string())。DBMS对标识符(例如表名、字段名)的转义规范与参数不同。一些数据库管理系统(如PostgreSQL)提供标识符转义函数pg_escape_dentifier(),但并非所有数据库管理系统都提供标识符转义API。如果是这种情况,请参阅数据库系统手册以了解正确的转义方法。+1表示NULLIF,遗憾的是,尽管它是标准SQL,但还是有点模糊。
  $sql="INSERT INTO scores (hometeam, awayteam, result)
  VALUES
  (NULLIF('" . mysql_real_escape_string($_POST['hometeam']) . "', ''),
   NULLIF('" . mysql_real_escape_string($_POST['awayteam']) . "', ''),
   NULLIF('" . mysql_real_escape_string($_POST['result']) . "', ''))";