bioshock Posted October 15, 2012 at 08:34 PM Report #479262 Posted October 15, 2012 at 08:34 PM (edited) Boas! Tenho andado em volta de um INSERT manhoso que me está atormentar. Código actual: $query = $db->prepare("INSERT INTO catalogos(ficheiro, data, desc, visivel) VALUES (?, DATE(?), ?, ?)"); $query->bind_param("sssi", $file__, $data__, $desc__, $visivel__); /* Ora, os parâmetros do bind_param são: i -> corresponding variable has type integer d -> corresponding variable has type double s -> corresponding variable has type string b -> corresponding variable is a blob and will be sent in packets */ $file__ = $_POST['n_file']; $data__ = $_POST['n_data']; $desc__ = $_POST['n_desc']; if($_POST['n_visivel'] == 'ON'){ $visivel__ = 1; }else{ $visivel__ = 0; } Fatal error: Call to a member function bind_param() on a non-object Não há um tipo de dado específico para Data, li no entanto que poderia usar o "i", mas que teria de constar date&time. Experimentei colocar DATE(?) mas continua sem resultar. Fiz: $query = $db->prepare("INSERT INTO catalogos(ficheiro, data, desc, visivel) VALUES (?, DATE(?), ?, ?)"); var_dump($query); E ele devolve: bool(false) (com ou sem DATE(?)). Campo "Ficheiro" = Texto;Campo "Data" = Data; Campo "Desc" = Texto; Campo "Visivel" = Inteiro; Já utilizei o código acima para inserção de utilizadores e correu bem, pelo que não compreendo o porquê de não funcionar desta vez. Também já experimentei, em vez da utilização dos $_POSTs, escrever à mão os valores para ver se ele aceitava..e não aceita. Edited October 18, 2012 at 08:18 PM by bioshock
HappyHippyHippo Posted October 15, 2012 at 08:36 PM Report #479263 Posted October 15, 2012 at 08:36 PM que tipo de dados é a variável $db ?? isso é PDO/classe criada/etc ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
bioshock Posted October 15, 2012 at 08:41 PM Author Report #479264 Posted October 15, 2012 at 08:41 PM Peço desculpa, esqueci-me de colocar isso..é simplesmente a ligação à BD. $db = new mysqli('localhost', 'root', '', 'bd_2'); if ($db->connect_errno) { printf("Erro ao connectar: " . $db->connect_error); exit();} Neste caso não criei nenhuma classe específica.
HappyHippyHippo Posted October 15, 2012 at 08:47 PM Report #479271 Posted October 15, 2012 at 08:47 PM pois, parece que não deve gostar do "DATE(?)" experimenta assim : if (($query = $db->prepare("INSERT INTO catalogos(ficheiro, data, desc, visivel) VALUES (?, ?, ?, ?)")) == false) echo "ERROR : ".$db->error; else $query->bind_param("sssi", $file__, date("Y-m-d", strtotime($data__)), $desc__, $visivel__); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
bioshock Posted October 15, 2012 at 09:03 PM Author Report #479275 Posted October 15, 2012 at 09:03 PM Estava a pensar no mesmo e comecei a procurar inversão de datas, contudo não estou a conseguir adaptar isto correctamente. Só preciso da data. Estou a utilizar um simples input: <input type="date" ..../> E estava até a pensar só no seguinte: date("Y-m-d", $_POST['n_data']) Mas ele está-me a colocar: "1970-01-01".
HappyHippyHippo Posted October 15, 2012 at 09:14 PM Report #479279 Posted October 15, 2012 at 09:14 PM o segundo parâmetro da função date é um timestamp, é essa a razão porque o código que coloquei foi: date("Y-m-d", strtotime($data__)) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
brunoais Posted October 15, 2012 at 09:14 PM Report #479280 Posted October 15, 2012 at 09:14 PM @bioshock Altera o título do tópico para um título apropriado. Usar o nome do método não é suficiente para indicar o que o tópico contém. Resume o teu problema numa frase curta. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
bioshock Posted October 15, 2012 at 09:29 PM Author Report #479283 Posted October 15, 2012 at 09:29 PM o segundo parâmetro da função date é um timestamp, é essa a razão porque o código que coloquei foi: date("Y-m-d", strtotime($data__)) Sim, e continua sem funcionar, daí eu ter dado aquela solução. Aparece a mesma data. Erro meu, afinal funciona direito. Estava-me a enganar num pormenor do $_POST[]. Obrigado, está a funcionar! 👍
bioshock Posted October 17, 2012 at 09:21 PM Author Report #479556 Posted October 17, 2012 at 09:21 PM Bem, encontrei aqui outro problema..mas este parece simplesmente bruxedo. 😄 Tenho este input: <input type="text" name="n_desc" id="n_desc"/> E no código PHP utilizo, como coloquei no outro post: $query = $db->prepare("INSERT INTO catalogos(ficheiro, data, desc, visivel) VALUES (?, ?, ?, ?)"); $query->bind_param("sssi", $file__, $data__, $desc__, $visivel__); $file__ = $_POST['n_file']; $data__ = date("Y-m-d", strtotime($_POST['n_data'])); $desc__ = $_POST['n_desc']; if($_POST['n_visivel'] == 'on'){ $visivel__ = 1; }else{ $visivel__ = 0; } Ora, o que se passa: se eu só inserir os campos 'Ficheiro, Data e Visivel' ele funciona perfeitamente. Se eu incluir o campo 'Desc' já não funciona e dá o típico erro: Citação Fatal error: Call to a member function bind_param() on a non-object O campo é Varchar(100), assim como o campo Ficheiro (que funciona direito)..portanto não sei o que se passa. De salientar que o var_dump() devolve o texto correcto. Isto está-me a ultrapassar completamente o cérebro, não sei se é por estar à muitas horas a programar..mas não estou mesmo a ver de onde vem o problema.
HappyHippyHippo Posted October 17, 2012 at 09:56 PM Report #479560 Posted October 17, 2012 at 09:56 PM porque é que tens o bind_param antes de atribuires valores às variáveis ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
mjamado Posted October 17, 2012 at 10:29 PM Report #479562 Posted October 17, 2012 at 10:29 PM porque é que tens o bind_param antes de atribuires valores às variáveis ? Não é relevante. É suposto funcionar assim. bioshock, tens de mostrar o resto do código que está antes. Esse pedaço não tem nada de errado, logo, o erro tem que estar antes. "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.
HappyHippyHippo Posted October 17, 2012 at 10:33 PM Report #479563 Posted October 17, 2012 at 10:33 PM Não é relevante. É suposto funcionar assim. sim, eu sei que a função recebe a referência das variáveis, mas quando as soluções lógicas falham, as ilógicas teem de ser consideradas. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
mjamado Posted October 17, 2012 at 10:36 PM Report #479564 Posted October 17, 2012 at 10:36 PM mas quando as soluções lógicas falham, as ilógicas teem de ser consideradas. Percebo o ponto de vista, mas não concordo. No dia em que uma solução não for lógica (mesmo que da lógica muito peculiar do criador da linguagem/API/framework), mudo de profissão. "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.
HappyHippyHippo Posted October 17, 2012 at 10:40 PM Report #479565 Posted October 17, 2012 at 10:40 PM Percebo o ponto de vista, mas não concordo. No dia em que uma solução não for lógica (mesmo que da lógica muito peculiar do criador da linguagem/API/framework), mudo de profissão. já pensei fazer isso muitas vezes ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Solution taviroquai Posted October 17, 2012 at 11:48 PM Solution Report #479569 Posted October 17, 2012 at 11:48 PM Ora, o que se passa: se eu só inserir os campos 'Ficheiro, Data e Visivel' ele funciona perfeitamente. Se eu incluir o campo 'Desc' já não funciona A palavra DESC é uma palavra reservada... pode estar a dar barraca por isso...
brunoais Posted October 18, 2012 at 06:25 AM Report #479577 Posted October 18, 2012 at 06:25 AM (edited) O "Fatal error: Call to a member function bind_param() on a non-object" É porque o prepare está a retornar false e false não é um objeto, por isso, não tem métodos. A razão do false, já o taviroquai a afirmou. Edited October 18, 2012 at 06:26 AM by brunoais "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
HappyHippyHippo Posted October 18, 2012 at 08:19 AM Report #479580 Posted October 18, 2012 at 08:19 AM (edited) A palavra DESC é uma palavra reservada... pode estar a dar barraca por isso... pois ... eu nem penso nisso porque escrevo o meu sql sempre desta forma : INSERT INTO `catalogos`(`ficheiro`, `data`, `desc`, `visivel`) VALUES (?, ?, ?, ?) PS : é obviamente MySQL ... Edited October 18, 2012 at 08:19 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
bioshock Posted October 18, 2012 at 08:18 PM Author Report #479655 Posted October 18, 2012 at 08:18 PM A palavra DESC é uma palavra reservada... pode estar a dar barraca por isso... O problema estava realmente na palavra reservada. INSERT INTO `catalogos`(`ficheiro`, `data`, `desc`, `visivel`) VALUES (?, ?, ?, ?) Sim, utilizando as películas já funciona. Obrigado.
HappyHippyHippo Posted October 18, 2012 at 08:27 PM Report #479656 Posted October 18, 2012 at 08:27 PM Sim, utilizando as películas já funciona. Obrigado. cuidado, não são as "plicas" ou "peliculas" (acho que isso é este caracter ' que também se chama apóstrofe) mas sim o acento grave. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
mjamado Posted October 18, 2012 at 09:20 PM Report #479660 Posted October 18, 2012 at 09:20 PM A palavra DESC é uma palavra reservada... pode estar a dar barraca por isso... O mesmo erro duas vezes na mesma semana, é obra... 😄 "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now