Jump to content

function bind_param() - tipo de dados[Data]


Go to solution Solved by taviroquai,

Recommended Posts

Posted (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 by bioshock
Posted

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.

Posted

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
Posted

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".

Posted

@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%.

Posted

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! 👍

Posted

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.

20f3ka8.jpg

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.

Posted

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.

Posted
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.

  • Solution
Posted

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...

Posted (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 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%.

Posted (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 by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

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.

Posted

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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.