Php Sql查询变量如何在每个值上加撇号

Php Sql查询变量如何在每个值上加撇号,php,mysql,moodle,Php,Mysql,Moodle,我有一个来自Moodle的用户名数组,我想看看它们对应的id。由于$array=('user1'、'user'2…)是不合法的,而且大小/内容可能会有所不同,因此我在这里找到了一个有用的函数,它似乎可以满足我的需要: function apply_quotes($item) { return "'".mysql_real_escape_string($item)."'"; } $dataClip=array_map("apply_quotes",$dataClip); $allUsers=ar

我有一个来自Moodle的用户名数组,我想看看它们对应的id。由于$array=('user1'、'user'2…)是不合法的,而且大小/内容可能会有所不同,因此我在这里找到了一个有用的函数,它似乎可以满足我的需要:

function apply_quotes($item)
{
return "'".mysql_real_escape_string($item)."'";
}

$dataClip=array_map("apply_quotes",$dataClip);
$allUsers=array_map("apply_quotes",$allUsers);
输出$allUsers给了我以下信息:

Array ( [0] => 'guest
' [1] => 'admin
' [2] => 'xpto.xy
' [3] => 'a.maia
' [4] => 'd.mano
' [5] => 'a.cabral
' [6] => 'd.mateus
' )

//$allUsers gets me all usernames of Moodle, $dataClip gets me all usernames from an url xml file. 
$results=array_intersect((array)$dataClip,(array)$allUsers);
产出$结果:

Array ( [0] => 'a.cabral
' [1] => 'a.maia
' [54] => 'd.mateus
' )

list($usernamewhere,$usernameparams)=$DB->get_in_or_equal($results,SQL_PARAMS_NAMED,'username');
             $sql="SELECT u.id AS userid,u.username
                   FROM {user} u
                   WHERE u.username {$usernamewhere}";
                   $users=$DB->get_records_sql($sql,$usernameparams);
                   foreach($users as $user){
                       echo $user->userid. ' - ' . $user->username.'<br/>';
                       }
数组([0]=>“a.cabral”
“[1]=>”a.maia
“[54]=>”d.mateus
' )
list($usernamehere,$usernameparams)=$DB->get_in_或_equal($results,SQL_PARAMS_NAMED,'username');
$sql=“选择u.id作为用户id,u.username
来自{user}u
其中u.username{$usernamehere}”;
$users=$DB->get_records_sql($sql,$usernameparams);
foreach($users作为$user){
echo$user->userid.'-'.$user->username.
; }
编辑:在查询之后,我没有得到任何输出。有解决办法吗?

试试这个

  $sql="SELECT u.id AS userid
        FROM user u
        WHERE u.username  IN('".implode(',',$results)."')";
  • 你错过了单引号

  • 不要在where子句中给出别名

  • 不要在mysql中使用{}

编辑:

改变这个

  $userids = $DB->get_records_sql($sql);
  echo $userids;

正确的答案是

$sql="SELECT u.id AS userid
FROM user u
WHERE u.username IN('".implode(',',$results)."')";
  • 您正在使用{}作为表名,但它不是一个PHP变量

SQL不接受语法。移除WHERE零件中的AS:

$sql="SELECT u.id AS userid
  FROM {user} u
  WHERE u.username IN(".implode(',',$results).")";

{}是Moodle特有的,它用完整的表名-database+前缀替换表名

$DB->get_records_sql()返回一个对象数组

对于最初的问题,您得到了一个语法错误,因为用户名没有用引号括起来

正确的方法是

$usernames = array('username1', 'username2', ... );
list($usernamewhere, $usernameparams) = $DB->get_in_or_equal($usernames, SQL_PARAMS_NAMED, 'username');
$sql = "SELECT u.id AS userid, u.username
        FROM {user} u
        WHERE u.username {$usernamewhere}";
$users = $DB->get_records_sql($sql, $usernameparams);
foreach ($users as $user) {
    echo $user->userid . ' - ' . $user->username . '<br />';
}
$usernames=array('username1','username2',…);
list($usernamehere,$usernameparams)=$DB->get_in_或_equal($usernames,SQL_PARAMS_name,'username');
$sql=“选择u.id作为用户id,u.username
来自{user}u
其中u.username{$usernamehere}”;
$users=$DB->get_records_sql($sql,$usernameparams);
foreach($users作为$user){
echo$user->userid.'-'.$user->username.
; }
是PHP语法错误还是MySQL语法错误?我还建议你读一下。从clausedownvoter的位置删除
作为用户名
,你能解释一下原因吗,还是干脆放弃投票?最好做一个解释,让它更好地回答问题。你的代码没有问题,让我补充一下,不知道为什么它被否决。@echo_me moodle table语法强迫我使用{}。单引号解决了错误,但只在屏幕上打印数组。我的变量$results是两个数组相交的结果。@echo\u Me不打印任何内容。我确信我的moodle数据库中有用户,我的$results中也有用户名ha很高兴有否决票,但是有勇气发表评论,这样如果我犯了一些错误,我可以自己纠正。这只是在屏幕上打印单词数组。我的变量$results是两个数组相交的结果。可能你需要完成代码。如果您使用的是用户名,并且它们是字符串,那么您的$sql必须类似于。。。在('user1','user2')。$results变量是一个用户名数组,根据当前数据库的情况可能会有所不同,它可以小,也可以大,所以我不能在('user1','user2',…'user100000')中使用它。谢谢你Russell,我更新了我的帖子,提出了一个关于引用的新问题。
$usernames = array('username1', 'username2', ... );
list($usernamewhere, $usernameparams) = $DB->get_in_or_equal($usernames, SQL_PARAMS_NAMED, 'username');
$sql = "SELECT u.id AS userid, u.username
        FROM {user} u
        WHERE u.username {$usernamewhere}";
$users = $DB->get_records_sql($sql, $usernameparams);
foreach ($users as $user) {
    echo $user->userid . ' - ' . $user->username . '<br />';
}