我有一个通过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
等,则会更新正确的行。关于这个问题的任何想法都是错误的。
答案 0 :(得分:1)
您的查询字符串目前似乎是newComment=test?routeID=1
,而 应该是newComment=test&routeID=1
。 *
因此,PHP将当前查询字符串解析为具有值newComment
的单个名称test?routeID=1
,而不是两个名为newComment
和routeID
且名称为test
的名称{}分别为1
。
但是,请注意,绝对绝不能简单地将查询字符串中的值直接连接到SQL中:如果值不是预期的值,那么这可能会导致错误,这可能会被攻击者破坏你的数据库。见How can I prevent SQL injection in PHP?
请注意,正如mysql_connect()
所述:
警告
自PHP 5.5.0起,此扩展程序已弃用,将来将被删除。相反,应使用MySQLi或PDO_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类型表示。