我有一个数据库test
,表名table
有两列user
和email
。我的以下代码有什么问题?无法将数组$u
添加到我的数据库
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
$user = "safwan";
$email = "esafw@jdjd.com";
$u = array ( user => $user,
email => $email
);
$q = "INSERT INTO table VALUES ($u)";
mysql_query($q) OR die(mysql_error());
mysql_close($con);
?>
您有几个问题:
-
您正在尝试将数组直接插入到数据库中。您需要单独访问这些值。
-
您应该在字符串周围使用引号,包括当它们是数组中的键时
-
您需要了解 SQL 注入
-
您应该考虑从 mysql_* 函数迁移,因为它们很快就会消失。
-
table 是一个 MySQL 关键字,如果它实际上是表名,则需要反引号
$user, "电子邮件" => $email ); $q = "插入到表中(用户、电子邮件)值(".mysql_real_escape_string($u['用户'])."'', '".mysql_real_escape_string($u['电子邮件'])."')"; mysql_query($q)或死亡(mysql_error()); mysql_close($con); ?>
或:
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
$user = "safwan";
$email = "esafw@jdjd.com";
$q = "INSERT INTO table (user, email) VALUES ('".mysql_real_escape_string($user)."', '".mysql_real_escape_string($email)."')";
mysql_query($q) OR die(mysql_error());
mysql_close($con);
?>
请查看MySQL数据类型。 http://dev.mysql.com/doc/refman/5.5/en/data-types.html
您必须遍历数组并单独添加元素。我还建议使用其他东西,如MySQLi或PDO进行安全 http://php.net/manual/en/book.pdo.php
事实上,使用 PDO,您可以"添加阵列"(因为它的设计方式)。
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name=? AND password=?);
$stmt->execute(array($_GET['username'], $_GET['password']));
我不会详细介绍太多细节,因为您应该真正学习一种较新的技术。使用预准备语句和SQL注入之类的东西更安全。
尝试回显查询。它将如下所示:
"INSERT INTO table VALUES (array)".
肯定是你不想要的。
您可以通过循环遍历数组或直接使用 :
INSERT INTO table VALUES ($user, $email)