我正试图使用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)