首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未更新sql数据库

问未更新sql数据库
EN

Stack Overflow用户
提问于 2012-06-25 05:52:22
回答 4查看 98关注 0票数 0

我写了下面的代码,但它没有更新数据库,它是脚本的一部分,它停止work..cant寻找绕过它的方法。需要建议

代码语言:javascript
复制
<?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);


?> 
EN

回答 4

Stack Overflow用户

发布于 2012-06-25 06:02:30

代码语言:javascript
复制
$update = "INSERT sanjana SET $name ='$usernames'";

这可能表示为一条UPDATE语句,因此对于更新,它应该是

代码语言:javascript
复制
$update = "UPDATE sanjana set name = '$usernames'";

由于您的第二个查询,我放入了name而不是$name,没有看到任何地方定义了$name。请注意,这会将sanjana表中每一行的列name中的值更改为$usernames的值,通常这样的语句会受到conditions的限制,例如WHERE userid = 33

代码语言:javascript
复制
$update1 = "INSERT INTO sanjana (name) VALUES ($usernames)";

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

代码语言:javascript
复制
$update1 = "INSERT INTO sanjana (name) VALUES ('$usernames')";

注意,这种将变量直接放入查询字符串的方式会使您容易受到SQL injection的攻击,为了解决这个问题,请使用PDO或mysqli扩展,它们都通过为您提供prepared statements来保护您免受注入;不再推荐使用普通的老式mysql_*。

使用pdo时,您可以像这样使用准备好的语句

代码语言:javascript
复制
<?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甚至具有独立于数据库的优势,这使得在现有代码中使用另一个数据库变得更容易。

票数 3
EN

Stack Overflow用户

发布于 2012-06-25 05:56:57

正确的update sql子句如下:

代码语言:javascript
复制
UPDATE table
SET column = expression;

或

代码语言:javascript
复制
UPDATE table
SET column = expression
WHERE predicates;

SQL: UPDATE Statement

您的查询应如下所示:

代码语言:javascript
复制
$update = "UPDATE sanjana SET $name ='$usernames'";
mysql_query($update, $link);

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

更新:

因为要在空表中插入数据,所以应该先执行$update1查询,然后再执行$update查询。UPDATE子句将不对空表进行更改/插入。

票数 2
EN

Stack Overflow用户

发布于 2012-06-25 06:01:37

问题1:使用正确的"insert into“(创建新记录)与"update”(修改现有记录)

问题2:最好的做法是在调用mysql_query()之前创建SQL字符串,这样就可以将其打印出来进行调试。

问题3:检测错误也是一个很好的做法

示例:

代码语言:javascript
复制
<?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());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11181494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档