简体   繁体   English

获取错误 - SQLSTATE [21000]:基数违规:1241操作数应包含1列

[英]getting error - SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)

I am getting this error SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) can someone help me understand why? 我收到此错误SQLSTATE [21000]:基数违规:1241操作数应包含1列(s)有人可以帮我理解原因吗?

Here is my code: 这是我的代码:

<?php


session_start();
$turk_number ='';
$serial='';
$version='';
if(isset($_POST['turk_number']))
{
    $_SESSION['turk_number'] = $_POST['turk_number'];
    $turk_number= $_POST['turk_number'];
}

$hostname = "localhost";
$username = "root";
$password = "";
$dbname = "resolver";

try 
{
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $query1 = "SELECT ((SELECT * FROM participants ORDER BY serial DESC LIMIT 0, 1) % 10) + 1 as version";
    //$results = $dbh->query($query1);
        $results = $dbh->prepare($query1);
        $results->execute();
        $serial = $results->fetchColumn(0);
    if($test= $results->fetchColumn(1))     
    {
        $version = $test;   //last version on record + 1
    }
    else //if no user ever played any games
    {
        $version = 1;
    }
    $query2 = "INSERT INTO participants (version) VALUES (:version, :turk_number)";
        $stmt = $dbh ->prepare($query2);
        $stmt ->execute(array(':version' => $version,
                            ':turk_number' => $turk_number));

}
catch(PDOException $e)
{
    echo $e->getMessage();
}   

$_SESSION['serial']= $serial;
$_SESSION['version']=$version;


?>
serial <?php print $serial; ?><br />
version <?php print $version; ?><br />
turk <?php print $turk_number; ?>

you are selecting all columns in inner query and then trying to do %10 , it gives you error because you cant %10 to multiple columns. 您正在选择内部查询中的所有列,然后尝试执行%10 ,它会给您错误,因为您不能将%10转换为多列。 Switch it to select one column instead. 将其切换为选择一列。

(SELECT * FROM participants ORDER BY serial DESC LIMIT 0, 1) % 10

selects multiple columns and then tries to mod it by 10 选择多个列,然后尝试通过10 国防部

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM