我写了下面的代码,但它没有更新数据库,它是脚本的一部分,它停止工作。找不到解决方法..需要建议
<?php
$link = mysql_connect('xxxxxxxx');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("xxx", $link);
$usernames='aneeshxx';
echo $usernames;
$update = "INSERT sanjana SET $name ='$usernames'";
mysql_query($update, $link);
$update1 = "INSERT INTO sanjana (name)VALUES ($usernames)";
mysql_query($update1, $link);
?>
$update = "INSERT sanjana SET $name ='$usernames'";
这可能意味着作为 UPDATE 语句,因此对于更新,它应该是
$update = "UPDATE sanjana set name = '$usernames'";
由于您的第二个查询,我放了name
而不是$name
,并且没有看到$name
在任何地方被定义。请注意,这会将sanjana
表中每一行的列name
中的值更改为 $usernames 的值,通常这样的语句会受到条件的限制,例如 WHERE userid = 33
$update1 = "INSERT INTO sanjana (name) VALUES ($usernames)";
对于 INSERT 语句,它需要将值引号括起来,以便
$update1 = "INSERT INTO sanjana (name) VALUES ('$usernames')";
请注意,这种将变量直接放入查询字符串的方式使您容易受到SQL注入的攻击,为了解决这个问题,请使用PDO或mysqli扩展,它们都通过为您提供准备好的语句来保护您免受注入的影响;不建议再使用普通的旧mysql_*。
使用PDO,您将使用这样的预准备语句
<?php
// we got $usernames from wherever you define it
$pdo = new PDO('mysql:dbname=mydb;host=localhost','username','password');
// to insert
$statement = $pdo->prepare('INSERT INTO `sanjana` (name) VALUES (:name)');
// the following replaces :name with $usernames in a safe manner, defeating sql injection
$statement->bindParam(':name',$usernames);
$statement->execute(); // it is done
// to update
$statement = $pdo->prepare('UPDATE `sanjan` SET `name` = :name');
$statement->bindParam(':name',$usernames);
$statement->execute(); // it is done
因此,正如您所看到的,保护您的代码免受恶意输入并不难,它甚至使您的 SQL 语句更易于阅读。您是否注意到您甚至不再需要在 SQL 语句中引用您的值?准备好的声明会为您处理!少一种在代码中出现错误的方法。
请仔细阅读它,它会为您省去头痛。PDO甚至具有独立于数据库的优点,这使得使用具有现有代码的另一个数据库变得更加容易。
正确的更新 sql 子句是这样的:
UPDATE table
SET column = expression;
或
UPDATE table
SET column = expression
WHERE predicates;
SQL:更新语句
您的查询应如下所示:
$update = "UPDATE sanjana SET $name ='$usernames'";
mysql_query($update, $link);
当然你需要指定一行来更新(id),其他方面,整个表都会设置列$name
来$usernames
。
更新:
由于要在空表中插入数据,因此应首先执行 $update 1 查询,然后执行$update查询。 UPDATE
子句不会对空表进行任何更改/插入。
问题 1:使用正确的"插入到"(创建新记录)与"更新"(修改现有记录)
问题 2:最好在调用 mysql_query() 之前创建 SQL 字符串,以便可以将其打印出来进行调试
问题 3:检测错误也是一种很好的做法
例:
<?php
$link = mysql_connect('xxxxxxxx')
or die('Could not connect: ' . mysql_error());
mysql_select_db("xxx", $link);
$usernames='aneeshxx';
$sql = "INSERT INTO sanjana (name) VALUES ('" . $usernames + ")";
echo "sql: " . $sql . "...<br/>'n";
mysql_query($sql, $link)
or die(mysql_error());
你的更新SQL有INSERT关键字,这应该改为UPDATE:
$update = "UPDATE sanjana SET $name ='$usernames'";