【问题标题】:MySQL - SELECT query with variable in it won't executeMySQL - 带有变量的 SELECT 查询不会执行
【发布时间】:2014-04-16 13:56:18
【问题描述】:

所以我正在尝试创建一个动态 SELECT 查询,该查询将仅显示先前选择并存储在字符串 $stANCol 中的列。

$idServ = 17; //$_GET(Selected);
$queryIsSelected = "SELECT $stANCol FROM camposservico WHERE idServico = ? ;";              
$stmt = $mydb->prepare($queryIsSelected);        
$stmt->bind_param("i", $idServ);                
$stmt->execute();

来自$stANCol的回声是

morada, dieta, dataIntervencao, sondaVesical, ecd,
sinaisVitais, riscoQueda, riscoAlergia, riscoTransfusao, riscoMultiRisco, obsQuadro, obs

这些列可能会根据选择或不选择而改变。

来自$queryIsSelected的回声是

SELECT morada, dieta, dataIntervencao, sondaVesical, ecd, 
sinaisVitais, riscoQueda, riscoAlergia, riscoTransfusao,
riscoMultiRisco, obsQuadro, obs FROM camposservico WHERE idServico = ? ;

这个查询在 phpMyAdmin 上工作得很好,因此我的问题。我做错了什么还是不可能在 SELECT 上使用字符串变量?

编辑: 事实证明,这段代码没有任何问题,我的页面上潜伏着一条待处理的语句,它与这个代码混淆了。谢谢大家的回复:)

【问题讨论】:

  • SELECT * FROM camposservico WHERE idServico = ? 工作吗?
  • 哦,实际上现在已经没有了。我当时在别的地方搞砸了。我想这个问题现在无关紧要。感谢您的回复,抱歉浪费了时间。

标签: php mysql sql dynamic execute


【解决方案1】:

删除 ;根据您的查询

你的:

$queryIsSelected = "SELECT $stANCol FROM camposservico WHERE idServico = ? ;"; 

删除后;

$queryIsSelected = "SELECT $stANCol FROM camposservico WHERE idServico = ? "; 

它将被执行。

【讨论】:

  • 感谢您的回复,但这并没有什么不同。我没有“;”之前,我在这里写问题时实际上添加了它:)
  • 什么作用?代表 idServico = ?
  • WHERE 子句中的 idServico 设置在 bind_param 上,因此是“?”。它始终是用户选择的 int。
  • 您遇到了什么错误?试试,手动插入值而不是 ?.. 看看它是否得到执行?例如$queryIsSelected = "SELECT $stANCol FROM camposservico WHERE idServico = 111 ";
  • 这正是我首先尝试的。我不断收到“致命错误:在非对象上调用成员函数 execute() ...”。
【解决方案2】:

我在您的查询中添加了单引号

$queryIsSelected = "SELECT $stANCol FROM `camposservico` WHERE `idServico` = ? ";

【讨论】:

  • 感谢您的回复,但还是一样。我的大多数查询都没有任何单引号,并且仍然执行。问题一定是其他让我很紧张的事情
【解决方案3】:

试试这个

$queryIsSelected = "SELECT $stANCol FROM camposservico WHERE idServico = ? ;";              
$stmt = $mydb->prepare($queryIsSelected);        
$stmt->bind_param("i", $idServ);  

// move this to here
$idServ = 17;

$stmt->execute();

也尝试使用类似的东西进行调试

if($stmt === false) {
   trigger_error('Wrong SQL: ' . $queryIsSelected . ' Error: ' . $mydb->errno . ' ' . $mydb->error, E_USER_ERROR);
}

【讨论】:

  • 已更新答案,您的陈述可能有问题。
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 2015-04-22
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多