PHP使用外部值更新MySQL表

时间:2014-03-05 18:00:14

标签: php mysql sql-update

我有一个通过php连接到xcode的mysql表,我试图使用这个代码更新一个单元格,并且在表中没有返回任何内容。

<?php

$conn = mysql_connect($host, $user, $pass);
@mysql_select_db($db) or die("Unable to find database");

$routeID = $_GET["routeID"];
$newComment = $_GET["newComment"];

$query = "UPDATE routes SET comment = '$newComment' WHERE routeID='$routeID'";

mysql_query($query) or die (mysql_error("error"));
mysql_close();
?>

如果我将$routeID更改为routeID='routeID'routeID=routeID,则会更新整个评论列并将实际ID添加到其中,例如test?routeID=1

如果我将$routeID更改为routeID=1 or 20等,则会更新正确的行。关于这个问题的任何想法都是错误的。

1 个答案:

答案 0 :(得分:1)

您的查询字符串目前似乎是newComment=test?routeID=1,而 应该是newComment=test&routeID=1 *

因此,PHP将当前查询字符串解析为具有值newComment的单个名称test?routeID=1,而不是两个名为newCommentrouteID且名称为test的名称{}分别为1

但是,请注意,绝对绝不能简单地将查询字符串中的值直接连接到SQL中:如果值不是预期的值,那么这可能会导致错误,这可能会被攻击者破坏你的数据库。见How can I prevent SQL injection in PHP?

请注意,正如mysql_connect()所述:

  

警告

     

自PHP 5.5.0起,此扩展程序已弃用,将来将被删除。相反,应使用MySQLiPDO_MySQL扩展名。有关详细信息,另请参阅MySQL: choosing an API指南和related FAQ。该功能的替代方案包括:

     

最后,请注意mysql_error()的(可选)参数是MySQL链接标识符资源,在您的情况下为$conn:传递字符串文字,例如"error"将导致其故障。

*如Data Handling中所述,arg_separator.input的默认值(被称为“ PHP用于将输入URL解析为变量的分隔符列表。 “)是"&"。这与the encoding used by browsers to submit form data一致,由application/x-www-form-urlencoded MIME类型表示。