【问题标题】:phpmysql inserts blank instead of valuephp mysql插入空白而不是值
【发布时间】:2013-02-01 17:00:22
【问题描述】:

我有以下功能:

function insert($database, $table, $data_array)
{
# Connect to MySQL server and select database
$mysql_connect = connect_to_database();
mysql_select_db ($database, $mysql_connect);

# Create column and data values for SQL command
foreach ($data_array as $key => $value) 
    {
    $tmp_col[] = $key;
    $tmp_dat[] = "'$value'";
    }
 $columns = join(",", $tmp_col);
 $data = join(",", $tmp_dat);

# Create and execute SQL command
$sql = "INSERT INTO ".$table."(".$columns.")VALUES(". $data.");";
$result = mysql_query($sql, $mysql_connect);

# Report SQL error, if one occured, otherwise return result
if(mysql_error($mysql_connect))
    {
    echo "MySQL Update Error: ".mysql_error($mysql_connect);
    $result = "";
    }
else
    {
    return $result;
    }
}

php中的值如下:

$content_table = "p_content";
$insert_array['title'] = $title;
    $insert_array['content'] = $content;
$insert_array['url'] = $get_source;
$insert_array['video'] = $video;
$insert_array['date'] = $date;
insert(DATABASE, $content_table, $insert_array);

所有这一切的结果添加了一行带有 id(key、autoimcrement)、url 和 date。标题、内容和视频为空白。如果我回显标题我得到正确的结果,如果我 var_dump 标题我得到字符串(15)“blablablabla”,再次正确。

现在如果我手动设置 $title = "asdf";它被正确插入。内容和视频也是如此。

表结构

id int(8) unsigned NO PRI NULL auto_increment

title varchar(1000) YES NULL

内容长文本 YES NULL

video varchar(3000) YES NULL

url varchar(300) YES NULL

日期日期 YES NULL

【问题讨论】:

  • $insert_array 的输出是什么?尝试使用var_dumpprint_r 查看格式并确保SQL 格式正确。
  • Array ( [title] => "asjgalkjhgfdkjas". [content] => lqejrhgojiehrgakehlgkj [url] => xxxxxxxxxxxxxxxxx.html [video] => [date] => 2013-02-17 00: 45:46 )这就是 print_r 的样子,我尝试过不使用函数直接插入插入查询,但结果相同
  • 这是库的一部分,无论如何,如果我手动编码每个变量的值,插入效果很好
  • 好吧,引用 $title = ´(strip_tags($title))´;
  • 好的,正如@Mr.Radical 所说,我们需要准确示例您要插入的内容。是否有 NULL 值?您的字段允许 NULL 值,但您将值括在引号 '' 中。

标签: php mysql insert


【解决方案1】:

试试:

function insert($database, $table, $data_array)
{
    # Connect to MySQL server and select database
    $mysql_connect = connect_to_database();
    mysql_select_db($database, $mysql_connect);

    $cols = array();
    $vals = array();
    foreach ($data_array as $key => $value) {
        $cols[] = "`" . $key . "`";
        if (is_int($value) || is_float($value)) {
            $vals[] = $value;
        } else {
            $vals[] = "'" . mysql_real_escape_string($value) . "'";
        }
    }

    $sql = "INSERT INTO " . $table
         . ' (' . implode(', ', $cols) . ') '
         . 'VALUES (' . implode(', ', $vals) . ')';

    $result = mysql_query($sql, $mysql_connect);

    # Report SQL error, if one occured, otherwise return result
    if(mysql_error($mysql_connect)) {
        echo "MySQL Update Error: " . mysql_error($mysql_connect);
        $result = ""; // FIXME should probably return false here
    } else {
        return $result;
    }
}

重要

您的代码和上述代码可能容易受到 SQL 注入的攻击。去了解他们。

【讨论】:

    【解决方案2】:

    尝试在变量中添加引号。 :-) 原因是您的 MYSQL 列类型设置为 VARCHAR。插入数据需要用引号将插入内容括起来。

    顺便说一句。如果这是新代码,我建议切换到 MYSQLI 或 PDO 库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 2011-06-04
      • 2011-07-16
      • 2018-10-18
      • 2011-01-26
      • 1970-01-01
      • 2016-03-11
      相关资源
      最近更新 更多