Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅返回最后一个值的Php脚本_Php_Sql_Database - Fatal编程技术网

仅返回最后一个值的Php脚本

仅返回最后一个值的Php脚本,php,sql,database,Php,Sql,Database,嘿,我有下面的脚本,这是不工作,它越来越晚,我可以使用一些帮助。它从http post接收一个id数组,并应该获取用户名。当我向它发送一个我知道在我的数据库中的Id时,我返回空值。我的剧本怎么了 <?php $friendArray[] = $_POST["friendId"]; $hostname = 'http://localhost/'; $dbname = 'MYDB'; $db_username = 'user'; $db_password = 'pass'; $options

嘿,我有下面的脚本,这是不工作,它越来越晚,我可以使用一些帮助。它从http post接收一个id数组,并应该获取用户名。当我向它发送一个我知道在我的数据库中的Id时,我返回空值。我的剧本怎么了

<?php
$friendArray[] = $_POST["friendId"];

$hostname = 'http://localhost/';
$dbname = 'MYDB';
$db_username = 'user';
$db_password = 'pass';
$options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', );

$inQuery = implode(',', array_fill(0, count($friendArray), '?'));

try {
    $dsn = "mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=".$dbname;
    $dbh = new PDO( $dsn, $db_username, $db_password, $options);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false );
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sth = $dbh->prepare('SELECT USER_SCREEN_NAME USER WHERE USER_ID IN (' . $inQuery . ')');
    foreach ($friendArray[] as $k => $friend)
    {
        $sth->bindValue(($k+1), $friend);
    } 
    $sth->execute();
    $results = $sth->fetchAll(PDO::FETCH_ASSOC);
    $json=json_encode($results);
    echo $json;
}
catch(PDOException $e) {
    echo $e->getMessage();
}

$dbh = null;

?>

解决方案:我发现的主要问题是sql语句中没有“FROM”。在那之后,我又经历了一系列的迭代和问题,最终得到了下面的结果。另一个问题是循环和绑定不起作用,所以一旦我得到了正确格式的数组并将其传递到execute中,我就完成了这个技巧

<?php
$friendArray = array();
foreach ($_POST["friendId"] as $myFriend)
{
    $friendArray[] = $myFriend;
}

$hostname = 'http://localhost/';
$dbname = 'MYDB';
$db_username = 'user';
$db_password = 'pass';
$options = array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', );

$inQuery = implode('', array_fill(0, count($friendArray)-1, " OR USER_ID = ?"));

try {
    $dsn = "mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=".$dbname;
    $dbh = new PDO( $dsn, $db_username, $db_password, $options);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false );
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sth = $dbh->prepare("SELECT USER_SCREEN_NAME FROM USER WHERE USER_ID = ?" . $inQuery . "");
    $sth->execute($friendArray);
    $results = $sth->fetchAll(PDO::FETCH_ASSOC);
    $json=json_encode($results);
    echo $json;
}
catch(PDOException $e) {
    echo $e->getMessage();
}

$dbh = null;

?>

代码中的这一部分:

foreach ($friendArray[] as $k => $friend)
导致语法错误
$friendArray
不应在此处使用方括号
[]

foreach ($friendArray as $k => $friend)

此脚本中的哪些行没有按预期工作?这里可能有点偏离,但是
$friendArray[]=$\u POST[“friendId”]中的方括号是什么原因?这不就是将
$\u POST[“friendId”]
分配给
$friendArray[0]
?@cegfault查看
$inQuery
是如何填充的;这根本不是SQL注入。当我进行更改时,在“WHERE USER_ID IN(?)”附近会出现语法错误,因此在执行此操作时,bindValue似乎不起作用。那么为什么不直接通过execute()传递这些值呢?我将解决方案添加到了我的主要帖子中。在execute中传递它有帮助,但SQL和如何从POST获取数组仍然存在问题。谢谢