将值插入Mysql数据库时出错:


Trouble Inserting Value to Mysql database:

我正试图使用php将一个值放入Mysql数据库中。我只是处于最早的阶段,以确保它在应用于我的项目之前发挥作用。我已经通过别人的问题研究了不同的实现方式,我不确定为什么这没有插入价值。

我应该分配一个特定的行来插入它吗?现在,我只是想将值3插入数据库的Yield列中。我已经检查过以确保列名中第一个字母的大小写正确,并且数据库表的名称是cost_table。

当我运行这个程序时,我会得到打印出来的语句"failed to insert.."。当我检查数据库时,它仍然完全为空。

<?php
//variables as connection info...//
   $LinkID=mysql_connect("$host","$username","$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql = "INSERT INTO cost_table('Yield') VALUES 3";
$check=mysql_query($sql,$LinkID);
if (!$check){
    die ("failed to insert..");
}
echo "Insert Successful!";
?>

首先,要插入的列使用了错误的标识符,并且缺少了值的括号和引号。

你可能在某个地方看过一个视频教程,里面的记号看起来像是普通的引号;这种情况经常发生。

故障代码:

INSERT INTO cost_table('Yield') VALUES 3

应该读作,并在列名周围使用记号而不是常规的单引号:

$sql = "INSERT INTO cost_table (`Yield`) VALUES ('3')";

或者,如果您的列确实是int类型:

$sql = "INSERT INTO cost_table (`Yield`) VALUES (3)";

如果您以后想要使用$符号和/或小数$3.99,那么您需要引用值VALUES ('$3.99'),否则MySQL会抱怨这一点。不过,这种类型的值将要求您的列为VARCHAR只是旁注对于十进制减去美元符号,将需要decimal列类型。

如果使用了以下内容,就会发出语法错误的信号:

$check=mysql_query($sql,$LinkID) or die(mysql_error());

但是,您对使用此方法SQL注入持开放态度,我建议您在进一步处理项目之前使用准备好的语句。

以下是几个例子:

mysqli准备的语句示例:

$link = mysqli_connect("localhost", "user", "password", "database");
if (mysqli_connect_errno()) {
     printf("Connect failed: %s'n", mysqli_connect_error());
     exit();
} 
    $variable_1 = "Text";
    $variable_2 = "More text";
    $stmt = $link->prepare("INSERT INTO table_name 
                            (column_1, column_2) 
                            VALUES (?,?)");
    $stmt->bind_param('ss', $variable_1, $variable_2);
    $stmt->execute();
  • 旁注:s用于字符串

PDO准备的声明示例:

$dbh = new PDO('mysql:host=localhost;dbname=your_DB', $user, $pass);
$var_1 = "Text";
$var_2 = "More text";
$stmt = $dbh->prepare("INSERT INTO table_name 
                       (column_1, column_2) 
                       VALUES (:var_1,:var_2)");
$stmt->execute(array(':var_1' => $var_1, ':var_2' => $var_2));

参考文献:

  • mysqli和准备好的声明
  • PDO和准备好的报表

  • 插入:http://dev.mysql.com/doc/refman/5.6/en/insert.html

  • 表/列标识符:http://dev.mysql.com/doc/refman/5.0/en/identifier-qualifiers.html

在尝试之前,请先学习基础知识

以下链接将是有用的

  • http://dev.mysql.com/doc/refman/5.6/en/insert.html
  • http://www.w3schools.com/php/php_mysql_insert.asp

正确的查询是

INSERT INTO cost_table(`Yield`) VALUES (3)