不更新 SQL 数据库


not updating the sql database

我写了下面的代码,但它没有更新数据库,它是脚本的一部分,它停止工作。找不到解决方法..需要建议

<?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'";