【问题标题】:how i insert 1 data with 2 string? and insert into database?我如何用 2 个字符串插入 1 个数据?并插入数据库?
【发布时间】:2016-10-04 22:21:22
【问题描述】:

我正在执行插入语句,我希望 2 个用户名成为 1 个数据并插入数据库。我不知道该怎么做。

这是我的php和mysql

$target = $_GET['user'];
$id = $_SESSION['id'];

$targetusername = mysqli_query($connection,"SELECT username FROM user WHERE id='$target' ")or die(mysqli_error($connection));
$username=  mysqli_query($connection,"SELECT username FROM user WHERE id='$id'") or die(mysqli_error($connection));

$direct_message_room_name ="INSERT INTO direct_message_room(`direct_message_room_name`,`user_1_id`,`user_2_id`) VALUES (('$targetusername' + ' and ' + '$username'),'$id','$target')";

【问题讨论】:

  • 如果要在一个字段中存储多个变量,可以serialize()一个数组。不过,您应该有充分的理由需要这样做。它可能会降低您的数据库表的效率,尤其是在搜索等方面。
  • 我插入 2 用户名是因为它用于直接消息房间名称。用户可以查看他们之前与谁聊天的历史记录
  • 最好是serialize
  • 此外,您可以使用插入 $_GET 变量的查询进行 sql 注入。
  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug切勿$_POST$_GET 数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。

标签: mysql


【解决方案1】:

你可以像这样在 php 中连接两个字符串:

$StringAB = $StringA . " something " . $StringB;



$target = $_GET['user'];
$id = $_SESSION['id'];

$targetusername = mysqli_query($connection,"SELECT username FROM user WHERE id='$target' ")or die(mysqli_error($connection));


$username=  mysqli_query($connection,"SELECT username FROM user WHERE id='$id'") or die(mysqli_error($connection));

$rowUserName = mysql_fetch_array($username); 
$rowTargetUserName = mysql_fetch_array($targetusername );

$room_name = $rowUserName["username"] . ' and ' . $rowTargetUserName["username"]; // Create room name (assuming both exist)
$direct_message_room_name ="INSERT INTO direct_message_room(`direct_message_room_name`,`user_1_id`,`user_2_id`) VALUES ('$room_name','$id','$target')";

【讨论】:

  • 你的$room_name = $targetusername . ' and ' . $username; 有错误
  • Catchable fatal error: Object of class mysqli_result could not be converted to string in
  • 试试 $username["username"] 。'和 '。 $targetusername["用户名"]
  • 等一下,你需要获取数组。更新答案
  • 太棒了。但正如许多 cmets 所述,您需要防止注射。并确保这些用户名存在:)
【解决方案2】:

为了在一列中有两个变量,您可以serialize 一个数组,尽管除非有充分的理由,否则这通常是不受欢迎的。

$array = array('username'=>'user1','username2'=>'user2');
$serialize = serialize($array);

给你:

a:2:{s:8:"username";s:5:"user1";s:9:"username2";s:5:"user2";}

使用unserialize() 函数将其返回到数组。 Wordpress 是一个著名的 Web 应用程序,它以这种方式存储数组。

附带说明,您需要使用 bind 参数来避免可注入的 sql 查询:

// Do not do this
$target = $_GET['user'];
mysqli_query($connection,"SELECT username FROM user WHERE id='$target' ")

这是一个参考:

What does bind_param accomplish?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2023-03-10
    • 2019-07-18
    • 1970-01-01
    相关资源
    最近更新 更多