php 获取错误 - SQLSTATE[21000]:基数违规:1241 操作数应包含 1 列
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14864052/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
getting error - SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)
提问by user1015214
I am getting this error SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) can someone help me understand why?
我收到此错误 SQLSTATE[21000]: Cardinality conflict: 1241 Operand should contain 1 column(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; ?>
回答by GGio
you are selecting all columns in inner query and then trying to do %10, it gives you error because you cant %10to multiple columns. Switch it to select one column instead.
您正在选择内部查询中的所有列,然后尝试执行%10,它会给您错误,因为您不能将%10 设置为多个列。将其切换为选择一列。
(SELECT * FROM participants ORDER BY serial DESC LIMIT 0, 1) % 10
selects multiple columns and then tries to modit by 10
选择多个列,然后尝试国防部通过它10

