将变量分配给SQL查询结果

3

我是一名初学者,正在练习一些SQL。

我想将PHP变量分配给我的SQL查询结果,并且我认为我曾经看到过这样的工作方式,但它似乎对我不起作用:

$query1 = mysql_query("SELECT * FROM markers WHERE id = '$markerid'");
$result = mysql_query($query1);
$markerData = mysql_fetch_array($result, MYSQL_ASSOC);

$name = $markerData['name'];
$description = $markerData['description'];
$directions = $markerData['directions'];
$lat = $markerData['lat'];
$lng = $markerData['lng'];
$type = $markerData['type'];
$addedby = $markerData['addedby'];

我是否明目张胆地忽略了某些规则?

此外,我知道SQL已经过时/不安全,只是想学习基础知识。

非常感谢您的帮助。


不是 SQL 不安全 :D MySQL API xD - Rizier123
2
如果你正在学习阶段,那么直接跳转到使用PDO准备语句。 - Abhik Chakraborty
3个回答

5
您应该将查询语句输入到mysql_query函数中,而不是使用另一个mysql查询来输入它:
$sql = "SELECT * FROM markers WHERE id = '$markerid'";
$result = mysql_query($sql);

必须注意:

请不要在新代码中使用 mysql_* 函数。它们已经不再维护了,并且已正式弃用。看到红框了吗?请学习使用预处理语句,并使用PDOMySQLi - 这篇文章将帮助您决定选择哪个。如果您选择使用PDO,请参考这个好的教程

即使您还处于起步阶段也没关系。既然您已经知道API已被弃用,并且您的查询是不安全的,为什么不养成良好的习惯呢。

以下是使用PDO和预处理语句的示例:

$db = new PDO('mysql:host=localhost;dbname=DB_NAME', 'username', 'password');
$sql = 'SELECT * FROM markers WHERE id = :markerid';
$select = $db->prepare($sql);
$select->bindParam(':markerid', $markerid, PDO::PARAM_INT);
$select->execute();

$markerData = $select->fetch(PDO::FETCH_ASSOC);

$name = $markerData['name'];
$description = $markerData['description'];
$directions = $markerData['directions'];
$lat = $markerData['lat'];
$lng = $markerData['lng'];
$type = $markerData['type'];
$addedby = $markerData['addedby'];

谢谢。真的。自学编程很难找到像这样的并排比较和建议,例如我应该从一开始就尝试使用PDO。很容易产生错误的观念,比如所有代码都是基于mySQL构建的。代码也能正常工作。 - ambe5950
@ambe5950,上面答案中教程链接的好处在于它提供了从MySQL到PDO的对照,更易于理解。你可以看到它们的对应关系。我建议你阅读一下,非常有帮助。我很高兴这个能帮到你。 - Kevin

0
你可以像这样循环遍历你的结果:
while ($row = mysql_fetch_assoc($result)) {
    echo $row["name"];
    echo $row["description"];
    echo $row["directions"];
    echo $row["lat"];
    echo $row["lng"];
    echo $row["type"];
    echo $row["addedby"];
}

而你的查询应该采用类似这样的 SQL 语句:

$sql = "SELECT * FROM markers WHERE id = '$markerid'";
$result = mysql_query($sql);

0
你可以使用这样的查询。
SELECT * FROM "markers" "t" WHERE "id" = ''.$markerid.'';

1
你能详细解释一下你的答案,说明为什么这会起作用吗? - Skami
这个案例特别适用于PHP。我们可以按照以下格式分配变量:''.$markerid.''。 - Hasini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接