没有更新sql数据库

时间:2012-06-24 21:52:22

标签: php sql

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

<?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);


?> 

4 个答案:

答案 0 :(得分:3)

$update = "INSERT sanjana SET $name ='$usernames'";

这可能意味着UPDATE语句,因此对于更新,它应该是

$update = "UPDATE sanjana set name = '$usernames'";

由于您的第二次查询,我没有name,而是$name,因此无法在任何地方定义$name。请注意,这会将name表格中每行的sanjana列中的值更改为$ usernames的值,通常此类语句会受conditions限制,例如WHERE userid = 33

$update1 = "INSERT INTO sanjana (name) VALUES ($usernames)";

对于INSERT语句,它需要引用的值为

$update1 = "INSERT INTO sanjana (name) VALUES ('$usernames')";

请注意,这种将变量直接放入查询字符串的方法会让您容易受到SQL injection的攻击,为了解决这个问题,请使用PDOmysqli扩展名来保护您免受通过向您提供prepared statements;不推荐使用普通的旧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甚至具有独立于数据库的优势,使得使用现有代码更容易使用另一个数据库。

答案 1 :(得分:2)

正确的更新sql子句是这样的:

UPDATE table
SET column = expression;

OR

UPDATE table
SET column = expression
WHERE predicates;

SQL: UPDATE Statement

您的查询应该是这样的:

$update = "UPDATE sanjana SET $name ='$usernames'";
mysql_query($update, $link);

当然,您需要指定要更新的行(id),否则,整个表格会将列$name设置为$usernames

<强>更新

因为您在空表中插入数据,所以应首先执行$ update1查询,然后执行$ update query。 UPDATE子句不会在空表上进行更改/插入。

答案 2 :(得分:2)

问题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());

答案 3 :(得分:0)

您的更新SQL有INSERT关键字,应该更改为UPDATE:

$update = "UPDATE sanjana SET $name ='$usernames'";