我有这个简单的PHP/MYSQL准备语句:
$DBH->prepare("SELECT * FROM books '.($_POST['author'] ? '' : '').'
WHERE id = '1'");
上面的三元操作符会导致语法错误。该错误与使用post变量$_POST['author']
有关。
我试着把它改成:
$_POST[''author'']
$_POST['"author'"]
$_POST["author"]
你需要把php用双引号括起来:
$DBH->prepare("
SELECT *
FROM books " .($_POST['author'] ? '' : ''). "
WHERE id = '1'
");
您的引号不匹配。
$DBH->prepare("SELECT * FROM books ".($_POST['author'] ? '' : '')." WHERE id = '1'");
这是因为你使用了" at first, and then "
"string "必须是"string"或"string"
我认为你不能在prepare()中使用问号,因为它可能会认为它是一个绑定变量。
而不是使用
$author = $_POST['author'] ? '' : '';
$Sql = "SELECT * FROM books.$author WHERE id = 1";
$DBH->prepare($Sql);
希望它能起作用!
总之…
如果我们假设$_POST是作者表,你应该这样做
$_POST['author'] = "authors"
在你的代码中使用($_POST['author'] ?
在作者表中使用$_POST['author']要好得多。然后选择子句应该像
$table = $_POST["author"];$DBH->prepare("SELECT * FROM books b INNER JOIN $table a ON b.author_id=a. "
如果我们假设你在post变量中设置的内容在索引中,你必须这样做:
$index = $_POST["author"];$DBH->prepare("SELECT * FROM books WHERE author_id = $index");
应该可以,但是无论如何,你应该给我们更多的信息
表的两个选项我认为是::
books is id, author id,…作者id