数据库仅返回第一行

时间:2018-05-24 21:20:48

标签: php mysqli

这很奇怪,但是当我执行查询“SELECT * FORM table”时它只返回第一行,但是当我执行“SELECT * FORM table WHERE id = 2”时,我确实得到了第二行。有人可以帮我这个吗?

这是我的代码: DB类,

using Microsoft.Bot.Builder.Dialogs;
using System;
using System.Threading.Tasks;
using Microsoft.Bot.Connector;
using Microsoft.Bot.Builder.FormFlow;
using System.Collections.Generic;
using System.Collections.Concurrent;
using Microsoft.Bot.Builder.ConnectorEx;
using Newtonsoft.Json;

namespace CardsBot
{
    [Serializable]
    public class SendToUserDialog : IDialog<object>
    {
        static ConcurrentDictionary<string, ConversationReference> _cachedConversationReferences = new ConcurrentDictionary<string, ConversationReference>();
        private const string HelpString = "Enter 'Send Card' to send a card to another user. 'Send Message' to send a json message to another user.  Or 'List Users' to see who is ready to receive messages.";

        public async Task StartAsync(IDialogContext context)
        {
            context.Wait(this.MessageReceivedAsync);
        }

        public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
        {
            var message = await argument;

            string upperText = message.Text.Replace(" ", "").ToUpper();
            if (upperText == "SENDCARD")
            {
                IFormDialog<SendCardForm> form = new FormDialog<SendCardForm>(new SendCardForm(), SendCardForm.BuildForm, FormOptions.PromptInStart);
                context.Call(form, AfterSendCardComplete);
            }
            else if (upperText == "SENDMESSAGE")
            {
                IFormDialog<SendMessageForm> form = new FormDialog<SendMessageForm>(new SendMessageForm(), SendMessageForm.BuildForm, FormOptions.PromptInStart);
                context.Call(form, AfterSendMessageFormComplete);
            }
            else if (upperText == "LISTUSERS")
            {
                var names = String.Join(", ", _cachedConversationReferences.Keys);
                await context.PostAsync($"Users : {names}");
            }
            else
            {
                if (!context.UserData.ContainsKey("name"))
                {
                    var getNamePrompt = new PromptDialog.PromptString("What is your name?", "Please enter your name.", 3);
                    context.Call(getNamePrompt, AfterNamePrompt);
                }
                else
                {
                    await context.PostAsync($"You said: {message.Text} ({HelpString})");
                    context.Wait(MessageReceivedAsync);
                }
            }
        }
        private async Task AfterSendMessageFormComplete(IDialogContext context, IAwaitable<SendMessageForm> result)
        {
            var sendMessageForm = await result;
            if (string.IsNullOrEmpty(sendMessageForm.RecipientName))
            {
                await context.PostAsync("A recipient name was not provided.  Cannot send the message to nobody.");
            }
            else
            {
                ConversationReference conversation = null;
                if (_cachedConversationReferences.TryGetValue(sendMessageForm.RecipientName, out conversation))
                {
                    var originalReply = conversation.GetPostToBotMessage().CreateReply();
                    var replyMessage = GetMessage(originalReply, sendMessageForm.MessageJson);

                    var connector = new ConnectorClient(new Uri(originalReply.ServiceUrl));
                    await connector.Conversations.ReplyToActivityAsync(replyMessage);

                    await context.PostAsync($"Message was sent to {sendMessageForm.RecipientName} on {replyMessage.ChannelId} channel.");
                }
                else
                {
                    await context.PostAsync($"No recipient found matching the name {sendMessageForm.RecipientName}");
                }
            }
        }
        private async Task AfterNamePrompt(IDialogContext context, IAwaitable<string> result)
        {
            var name = await result;
            context.UserData.SetValue("name", name);
            await context.PostAsync($"Thanks.  What would you like to do now {name}? {HelpString}");

            var conversationReference = context.Activity.ToConversationReference();
            _cachedConversationReferences.AddOrUpdate(name, conversationReference, (oldVal, newVal) => conversationReference);
        }

        public Activity GetMessage(Activity originalReply, string messageJson)
        {
            var reply = JsonConvert.DeserializeObject<Activity>(messageJson);
            reply.ChannelId = originalReply.ChannelId;
            reply.Timestamp = originalReply.Timestamp;
            reply.From = originalReply.From;
            reply.Conversation = originalReply.Conversation;
            reply.Recipient = originalReply.Recipient;
            reply.Id = originalReply.Id;
            reply.ReplyToId = originalReply.ReplyToId;
            reply.ServiceUrl = originalReply.ServiceUrl;

            return reply;
        }

        private async Task AfterSendCardComplete(IDialogContext context, IAwaitable<SendCardForm> result)
        {
            var SendCardForm = await result;
            if (string.IsNullOrEmpty(SendCardForm.RecipientName))
            {
                await context.PostAsync("A recipient name was not provided.  Cannot send a card to nobody.");
            }
            else
            {
                ConversationReference conversation = null;
                if (_cachedConversationReferences.TryGetValue(SendCardForm.RecipientName, out conversation))
                {
                    var reply = conversation.GetPostToBotMessage().CreateReply();
                    reply.Attachments.Add(GetCard(SendCardForm.Text, SendCardForm.Buttons.Value));

                    var connector = new ConnectorClient(new Uri(reply.ServiceUrl));
                    await connector.Conversations.ReplyToActivityAsync(reply);
                }
                else
                {
                    await context.PostAsync($"No recipient found matching the name {SendCardForm.RecipientName}");
                }
            }
        }

        public Attachment GetCard(string text, int numberOfButtons)
        {
            var card = new HeroCard(text);
            card.Buttons = new List<CardAction>(GetCardActions(numberOfButtons));
            return card.ToAttachment();
        }

        private IEnumerable<CardAction> GetCardActions(int numberOfButtons)
        {
            for (int counter = 1; counter < numberOfButtons; counter++)
            {
                yield return new CardAction()
                {
                    Title = $"button{counter}",
                    Type = ActionTypes.ImBack,
                    Value = $"button{counter}"
                };
            }
        }
    }
    [Serializable]
    public class SendMessageForm
    {
        [Prompt("Who would you like to send this message to (enter the name of the recipient)?")]
        public string RecipientName { get; set; }
        [Prompt("Paste in the .json of the message you would like to Send.")]
        public string MessageJson { get; set; }

        public static IForm<SendMessageForm> BuildForm()
        {
            return new FormBuilder<SendMessageForm>()
                            .AddRemainingFields()
                            .Confirm("Is this information correct?{*}")
                            .Build();
        }
    }
    [Serializable]
    public class SendCardForm
    {
        [Prompt("What would you like for the card text?")]
        public string Text { get; set; }

        [Prompt("How many buttons?")]
        public int? Buttons { get; set; }

        [Prompt("Who would you like to send the card to?")]
        public string RecipientName { get; set; }

        public static IForm<SendCardForm> BuildForm()
        {
            return new FormBuilder<SendCardForm>()
                            .AddRemainingFields()
                            .Confirm("Is this information correct?{*}")
                            .Build();
        }
    }
}

的index.php,

OnMenuItemSelected

在我看来,这是一件奇怪的事情。 $ result1应该返回所有行,对吗?我希望它与DB类的查询方法中的 - &gt; fetch_object有关。我在那里搜索了这个问题,但我找不到它,因此php.net的fetch_object方法可以返回多行。有人有任何想法,他可以帮助我吗?

UPDATE:当我要求计数时,它会返回数据库中正确的行数,但stil它不会出现在$ _result属性中

1 个答案:

答案 0 :(得分:1)

您只需拨打fetch_object一次。

  

mysqli_fetch_object()将当前行结果集作为对象返回,其中对象的属性表示结果集中找到的字段的名称。

根据文件......

while ($obj = $result->fetch_object()) {
    printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
}

...你需要在循环中调用它,直到没有更多的对象可以获取。