我不明白为什么我会得到这样的错误:“prepared Statement中的变量数不匹配参数数”。
我的代码如下所示:
$DB['con'] = new mysqli($$DB['host'],$DB['user'],$DB['pass'],$DB['base']);
$stmt=$DB['con']->prepare("insert into points(iduser,puncte,nume,email,telefon,ultimulpost)values('?',?,'?','?','?',(SELECT CURDATE()))");
$stmt->bind_param('sisss',$idm,$mynumber,$nume,$email,$tel);
$stmt->execute();
问题就出在这一行:
$stmt=$DB['con']->prepare("insert into points(iduser,puncte,nume,email,telefon,ultimulpost)values('?',?,'?','?','?',(SELECT CURDATE()))");
您的错误是在?
占位符周围加上了引号。这意味着它们被解释为文字字符串?
,而不是需要填充的占位符。因此,您实际上只有一个占位符,所以当您发送五个时,它会告诉您您打错了号码。
引用是不必要的。'sisss'
的全部意思是说“这些值是字符串”,所以您不需要使用引号来说同样的话。
应采取以下措施:
$stmt=$DB['con']->prepare("insert into points(iduser,puncte,nume,email,telefon,ultimulpost)values(?,?,?,?,?,(SELECT CURDATE()))");
我正在使用编写我认为是相当基本的准备好的状态。语句如下所示(其中是实例): 这将失败,在中的参数数不匹配。
问题内容: 我正在尝试将数组作为IN变量传递给for。我怎样才能做到这一点? 我无法让它为我的一生工作。有什么想法吗?上面的代码只是一个示例。 问题答案: 在这种情况下,这样做是不合适的。您正在构造实际的SQL(这就是逗号和引号),并将其作为参数传递。它基本上以评估那里是全部。 同样,这是关于引号的一个好电话。MySQL使用单引号。 您将需要仅使用字符串连接来构建SQL,或者使用多个参数。 编辑
我得到这个错误:
问题内容: 使用Doctrine 2,我想让一些用户成为另一个用户的联系人。该表包含这些用户之间的映射。函数中的查询将返回以下错误: 参数编号无效:绑定变量的数量与令牌的数量不匹配。 但是,据我所知,它设置为“ b”,设置为“ 2”,两者均由该功能分配。 问题答案: 不要在查询文本中用引号将任何参数引起来! 应该
问题内容: 我正在尝试将以下对象保留为version : 当我尝试从数据库读回对象时,我得到一个(请参阅下面的完整堆栈跟踪) 我的小组使用的命名约定要求参数变量名称以开头,实例变量名称以开头。似乎在假设构造函数参数变量名称必须与对象实例变量名称匹配。 为什么不将构造函数参数用于我在构造函数中定义的实例变量映射? 有没有另一种方法来定义此映射,从而可以正确地构造我的对象,或者我是打破命名约定的唯一选
问题内容: 请看下面我的代码。我试图将一系列参数绑定到我准备好的语句中。我一直在网上四处逛逛,可以看到我必须使用call_user_func_array但无法正常工作。我得到的错误是:“第一个参数应该是有效的回调,给出了’Array’”我可能是错误的,但是我假设第一个参数可以是一个数组,并且此错误消息可能会引起误解。我认为问题是我的阵列在某种程度上存在错误。谁能看到我在做什么错?谢谢。 问题答案: