借助php变量从表中选择一个值
我在php代码中使用了一个名为$user_id的变量。这个变量在执行一个简短的代码脚本后获取一个值。我的数据库中还有一个名为users的表,该表包含用户id和电子邮件。如果要从我的数据库中选择电子邮件,则当我表中的user_id等于名为$user_id的变量时。我可以这样做吗?这是我的疑问:借助php变量从表中选择一个值,php,mysql,pdo,mysqli,Php,Mysql,Pdo,Mysqli,我在php代码中使用了一个名为$user_id的变量。这个变量在执行一个简短的代码脚本后获取一个值。我的数据库中还有一个名为users的表,该表包含用户id和电子邮件。如果要从我的数据库中选择电子邮件,则当我表中的user_id等于名为$user_id的变量时。我可以这样做吗?这是我的疑问: <?php //code ... $user_id=$_GET['user']; //$user_id gets a value here //now I want to select e
<?php
//code ...
$user_id=$_GET['user']; //$user_id gets a value here
//now I want to select email from table users, where user_id is equal to variable $user_id
mysql_query(" SELECT `email` FROM `users` WHERE `user_id`='$user_id' ");
?>
代码应为:
$email = '';
$res = mysqli_query(" SELECT `email` FROM `users` WHERE `user_id`='$user_id' ");
while ($temp = mysqli_fetch_assoc($res)) {
$email = $temp['email'];
}
是的,它会起作用的。我建议您使用或代替mysql_*函数。它们已被弃用 如果由于某些原因,您无法切换到其中任何一个;您应该过滤/清理查询
另外,如果user\u id是一个数字字段,则不需要将$user\u id括在引号中。您的代码具有基本功能,它只需要处理,我会添加一些检查
if(isset($_GET["user"]) && $_GET["user"] != "") //check there is a value for the user ID
{
if(is_int($_GET["user"]))
{
$user_id=$_GET["user"]);
$email="";
$q=mysql_query("SELECT email FROM users WHERE user_id={$user_id}") or die(mysql_error());
if(mysql_num_rows($q) > 0)
{
while($user=mysql_fetch_assoc($q))
{
$email=$user["email"];
}
}
else
{
echo "no users found";
}
}
else
{
echo "Not a valid user ID, please enter numeric value";
}
}
else
{
echo "No UserID";
}
hjpotter92建议您使用mysqli或pdo来询问您的数据库,我同意这一点,尽管在学习时,请使用mysql,因为有更多的资源可供学习,然后自信地转向新技术
请注意:我认为这是基于用户使用PHP和MySQL的经验,而不是基于最现代或最佳实践 你试过没有?比如..user\u id=$user\u id在哪里?有什么问题???您的代码是rightstop使用mysql_*函数,它们现在已被弃用,并使用字符串转义来停止sql注入。更好地使用mysqli或pdo只是浏览一下你的网站,我发现你对SQL、电子商务、基于Web的共享交易系统项目和MySQL、PHP、AJAX都有一定的了解。你的意思是你知道它们存在,但不是实际经验,对吗@mysql_num_行是错误的做法。停止使用mysql_*函数。它们现在已被弃用,请使用字符串转义停止sql注入。最好使用mysqli或PDO。虽然你的回答是正确的,但你真的认为问这个问题的人知道你对过滤/净化查询的意思以及他应该如何做?我猜他会找到mysql_real_escape方法,并结合你的论点删除引号,在他认为自己安全的时候创建SQL注入。我同意在PDO、Mysqli或两者中添加一个示例比只是重申不应该使用它们要好。我想这应该是对问题的评论,除非你愿意用一个例子来说明如何实现问题的目标。你至少可以添加一个数字值检查,而不是直接将GET值插入到查询中